You can use charindex() and reverse() to get your desired results:
declare @temp varchar(40)
set @temp = 'BB10-1_X-4759-566549'
select @temp, REVERSE(@temp)
select REVERSE(substring(REVERSE(@temp),0,CHARINDEX('-',REVERSE(@temp),0)))
Give this a shot. It answers your first question of extracting from after the last - of the string.
The next part of your question seems to indicate that you want to split the entire thing up based on the -. Using stored procedures or functions will fail because you want BB10-1_X to be a single string. So if these strings are always in this format of having exactly three -'s but you only want 3 substrings, you can hard code it like this.
declare @temp varchar(40), @reverse varchar(40), @sub1 varchar(20), @sub2 varchar(20), @sub3 varchar(20)
SET @temp = 'BB10-1_X-4759-566549'
SET @reverse = REVERSE(@temp)
SET @sub3 = REVERSE(substring(@reverse,0,CHARINDEX('-',@reverse,0)))
SELECT @temp = substring(@temp,0,charindex(REVERSE(substring(@reverse,0,CHARINDEX('-',@reverse,0))),@temp,0)-1)
SELECT @reverse = REVERSE(@temp)
SET @sub2 = REVERSE(SUBSTRING(@reverse,0,CHARINDEX('-', @reverse, 0)))
SET @sub1 = REVERSE(SUBSTRING(@reverse,CHARINDEX('-',@reverse,0)+1,LEN(@temp)-CHARINDEX('-',@reverse,0)))
select @sub1, @sub2, @sub3