Ruby, 86 8383 71 bytes
f=->s,v=[]{s.size>0?s[0]&&(s.reject!( &:empty?);f[s;[s.map{_1[1..]_1[0]},v<<sf[s.map{_1[0]}_1[1..]):v}]].join)}
Attempt This Online!Attempt This Online!
A rather naive approach and my first ruby golfgolf; later I could improve using some tips from my other Ruby golf.
s.reject!( &:empty?)
removes all empty strings from the array;s.map{_1[1..]}
the first letters are removed;v<<ss.map{_1[0]}
and added to the output vector;while
s.length>0
ss[0]&&(.length>0..)
the process is repeated recursively until all strings were removed and the output vector is joined to a string.