Instead of storing the occurrence objects of each subassembly in the list, store either the Occurrence objects from the toplevel assembly and a SubOccurrence object for all deeper assembly levels. This allows you to easily access the Reference property of a SubOccurrence to use it in the highlight set or select set.
If you want to continue with the Occurrence objects in your list, then you have to create the references recursively bottom-up from the lowest level until the toplevel.
To create a reference to a part in a subassembly, you will call CreateReference on the toplevel assembly with the subassembly occurrence as the first argument and the occurrence object inside the subassembly as the second argument. For deeper levels, you will need to create then references to the previously created reference object.
BTW: If you have the same subassembly duplicated in your assembly, you won't be able to distinguish between two same subparts in your assembly with your flat list of occurrences approach, but with the suboccurrence objects you will.