15-20 collections shouldn’t be a problem.
You are correct that there is no way to get the child objects. You could in your main collection let the segment designer create one game object per collection and in each game object attach the collection factory plus a script. The purpose of the script would be in the init function to register the contained factory with the main collection by doing a msg.post():
msg.post("game:/game", "register_segment", { url = msg.url("#collectionfactory") })
Maybe this picture better illustrates what I mean: