Your understanding is correct, yet:
sreeram.katta wrote:
...If yes, then the only scenario in which the cached user objects would be used is when another object has a reference to the cached user object.
If you query the objects, the "query" and it's results elements by ID are cached in the Query Cache, and they would also have the "values" in the 2nd level cache too. To utilize the cached objects at this point, you need to use the "same" query again, or get or load, or navigate to the object (basically access the object by ID).
l2 Cache is basically a hashmap by ID of items. and Collections are similar, in that the "collection" is cached with ID's. If you want to Query cached objects by item's VALUEs, then you'll need to use the Query Cache.