I removed the specific handling in VMGameObject in favor of setting the graphic as a normal read/write variable then using Refresh(my/stack object) to change the graphic and it seems to be working now (albeit only when I move the camera).
For specific cases right now I have a small switch above the indexed Object Data access. It only contains Object ID right now, but when more cases arise I'll add them. My betting behind indexed arrays for everything is mainly because (specifically for object data) most of the fields look like simple SimAntics read/write only without any VM intervention. There are the odd few that don't, though, which do need to be accounted for.
Right now the sim seems to accidentally play an animation when trying to reset, and a few other things (stop carry animation tries to load animation), so I'll look into reimplementing that with the revised events stuff now.