objects record references much the way variables do: they are lightweight references managers, they are terminal points for reference tracking and references cycles cannot be formed through them. For that, objects do not allow references to be held against them.
See Referable Objects.
Not allowing object references does not only make the management of the objects held references simple, but also makes the management of the objects themselves simple and objects fairly inexpensive artifacts.
Since references cannot be held agaist objects, the data that they refer needs not record objects in its reference uptracking lists. For reference tracking purposes, objects are as good as variables are.
See How References Are Tracked.
objects need to make proper data references, and for that they should register and unregister the references via the appropriate data procedures.
See struct x1f4_datatype_type.
See struct x1f4_nodetype_type.