I might look at this another way than my esteemed colleagues did.
Let's do a simple one.
So the question is, what is rsX? It is an address variable that has been strongly typed to limit its targets to DAO recordsets.
When you use the SET command, you advise Access that the thing in question is going to be an object structure. What you don't see is what really happens. Let's look at it mechanistically.
SET rsX = CurrentDB.OpenRecordset (yada, yada, yada...)
The OpenRecordset method of CurrentDB builds a data structure used to control a DAO Recordset. If you went to the Object Browser and called up DAO library and Recordset object, you could see most of what that structure looks like, even including structure offsets and the data types of the elements of the structure. In this context, rsX is an address pointer that points to the memory-resident data structure built by OpenRecordset.
Think about it. You always use SET object-variable = class.method - and it is the method that gives you the object structure, but the object-variable merely is the pointer to what you created. In essence, the method creates the block of memory for your object, initializes it, and returns the address to the object-variable via SET. SET warns Access that you think the variable is an object variable rather than a primitive variable (LONG, DOUBLE, etc.)
This is where two basic concepts come into play. First, when you open a structure, you close it. Like.... rsX.Close
But then, after you close it, you need to tell Access that you are done with the data structure - so.... SET rsX = Nothing
If you do these in the wrong order, or if you don't bother to close in the first place, you find that you run out of either or both memory and resources very quickly as your detritus accumulates.
That SET xxx = Nothing command triggers the object "destructor" that releases the data structure created in memory to actually control the object you were using. If you closed it first, you are OK. If you didn't, you left the object "dangling."
So, now to more directly answer your question:
Any non-primitive data type that supports use of "SET" such as DAO.Recordset or Access.ComboBox or whatever ya got is actually a pointer to a memory data structure.
The pointer is in the form of something called a descriptor, which includes the real address of the real controlling memory-resident data structure along with information needed to present the data type of the object and any associated elements.
The object's data structure contains the public and private slots that are the public and private properties of the object so represented. Other elements associated with the object include code references to methods associated with the object.
With regards to "references" - the word relates to referencing or dereferencing pointer variables.
Hope that helps you to see what really happens back there in the weeds.