It's returning a wrapper class instance that prevents callers from being able to directly modify the collection you are returning.
If you were to simply return the underlying list, any caller would be able to alter it in ways that may break the class that actually owns the list.
Even if you returned your list as a read-only interface (say IEnumerable, or ICollection), nothing prevents a caller from performing a run-time cast, and getting at the list.
By returning a wrapper object, you can prevent the caller from ever being able to alter the list. The wrapper does not expose any methods that allow the underlying list to be altered, and attempting to cast the wrapper object will fail. The wrapper does not duplicate the data - it merely keeps a reference to the list, and prevents write operations.
In the case of ORM mappings, this allows the object-model to control at which access point you can alter a relationship between objects.