So, effectively you do want to evaluate the global transform T of an object O at some arbitrary time t? I am afraid
ExecutePasses is indeed the only viable solution here, as the transform of an object can be influenced indirectly by many things, as for example ancestor nodes, constraints, or simulations. There is no meaningful way to resolve this other than executing the passes.
This is also a case where you should not execute the passes for frame n, but all frames up to n, when you want to support simulations. In order to avoid extreme overhead by doing this over and over in
ModifyObject, you should cache such information. In the simplest form this could be a button 'Build Time Cache' in the GUI of the object.
All in all, this also sounds very much like a plugin that is in violation of design principles for
ObjectData plugins. An object that can look omniscient into the past and future for any object in the scene, is in principle a quite expensive idea; it does not really matter that it is only the transform you want to know. This also could open a whole can of worms of feedback loops, depending on what you intend to do with that transform. When the vertices of object P rely on the transform T of object Q, and T relies in turn in some form on the vertices of P, you are going to have a problem, especially when you make this also time dependent.
I would also first check if there are simpler ways to achieve a similar effect. We cannot provide support on designing plugins, and we also do not known the greater context here, but I am sure that there is a simpler or at least more performant solution.