Query: How to join on different tables depending on the filled column?
Let's say that your tables are called (in order of you mentioning them):


Segment,
FK, 
JC_type_A, 
JC_type_B, 
etc


The main problem that I can see is that you don't know which junc_type will be for which junc. 
So you will have to left join back to their respective tables and select the one that is not null in your select statement.

Something along the lines of the following should help to be a template for you.

SELECT  s.Id,
        s.start_junc,
        s.end_junc,
        -- Coalesce works here as there are more than 2 potential NULL values
        --  and only 1 of them will be NOT NULL as you have said.
        start_junc_name = COALESCE(ja_start.name, jb_start.name, jc_start.name),
        end_junc_name   = COALESCE(ja_end.name, jb_end.name, jc_end.name),
FROM    #Segment AS s
JOIN    #FK AS f_start
ON      s.start_junc = f_start.Id
JOIN    #FK AS f_end
ON      s.end_junc = f_end.Id
-- get junc_a start if exists, else return null...
LEFT 
JOIN    #JC_type_A AS ja_start
ON      f_start.junc_type_A = ja_start.Id
-- get junc_a end if exists, else return null...
LEFT 
JOIN    #JC_type_a AS ja_end
ON      f_end.junc_type_A = ja_end.Id
--     [...continue for rest of tables...]