I agree its a bit complicated.
But when you operate in EntityFields instead of entities, it could become easier to write.
Let say for example you have a set o fields you need to fetch as a subquery.
You form a normal dynamic list with relations and predicates so far so good.
Then you have to give those fields a name: ContainingObjectName property will suit this need.
When you code main select all you have to add is a relation between main select and subselect which is done easily with LLBLGen, since you can create relations dynamically.
and you can incorporate fields form subselect into main result list.
Just think about this. Maybe you will have better ideas.
Maybe another option is to cretae new Entity types dynamically. For example put a set of fields from different entitites to a new entity but this entityt will be substituted with subselect in a final query.
Another option would be to hide this merging with hashtables from a final user even though it will be different selects, like you do with Prefetch paths. But instead of thinking with enitity objects try thinking with sets of fields...