The COM objects are only referenced for the period while the script is running; there is no way to hold a reference outside of an active script. You are correct that the garbage collector runs every 200 objects to cleanup the objects from previously executed scripts. This behavior is by design and intended.
A common issue caused by not understanding this is trying to use GetSceneByName and getting a scene copy and putting that on-air. The scene will lose its reference and get cleaned up by the garbage collector and get taken off. The correct solution to this is to not put scene copies on-air from a script, but rather to get the original scene by passing False as the third parameter to GetSceneByName, or instead by putting a sequencer item on-air instead.
#XPression