Kieren, I'm not sure if this fits under your umbrella of having a single top level file, but what about this?
%%%% song-FV.ly definedVariables = data \include song.ily %%%% song-SV.ly definedVariables = data \include song.ily %%%% song.ily \include [.ily files containing the notes, edition-engraver tweaks, etc.] \header { [header parameters shared by both versions] [differing header parameters defined in global variables] } \score { [contexts built from variables defined in \include-d files] } %%%% Optionally, you could use the output names and book blocks so that you can compile the whole work from a FullVersion.ly and ShortVersion.ly which are basically a series of includes of the applicable songs. Hope some of these ideas help or at least spark others, Sam