Passing object by reference in form element of type 'value'
Objects are 'passed by reference' in the context of being passed to a function in a single page request.

Once the page has reloaded (e.g. when you submit your form), the memory for the original object is freed and it's impossible to maintain a reference to it (at least with standard PHP to the best of my knowledge).

You can keep a copy of the object (which is what Drupal does), and instantiate a version of it on the next page, one that has exactly the same characteristics as the original even, but it's not a reference to it.

What you're doing is absolutely fine, but if you're worried about changes being made to the object after it's been attached to a form, but before it's been submitted, then you should keep hold of the object's identifier instead, and use whatever helper function is available to re-load that object in the submission process. That would be safest I think.

But if your class is dumb, and doesn't have DB persistence/unique identifiers/something that's going to be changed by some other part of the system, then just add it as a value as you're doing already.