One of the main practical issues behind the "only one URL should return a resource" is because of the effect on caches.
If you have two URLs for the same resource then you can end up with two copies in the cache. If you do a PUT to one of them, then the cache should invalidate both, but it does not know about the relation between the two copies.
Regarding the issue where you are using a hostname that may resolve to different stream of bytes depending on where you dereference it from, I don't see that as a problem at all. Conceptually you are accessing the same resource, it is really just a different instance of that resource. I use this extensively as a form of discovery mechanism. I develop an enterprise application that is hosted on a server that I alias as "TMServer". Within an organization, there is only ever one instance of a TMServer and all resources are accessed from that host. e.g. http://TMServer/Suppliers At one of my other customers, that same URL would resolve to a completely different set of suppliers but it is still conceptually a "list of suppliers".
If one of my customers were to try and share an URL with an another company, then the URL would need to be expanded to something like, http://TMServer.company.com/Suppliers. This then becomes a universally unique URI.
By using the DNS alias, I can easily use my .hosts file to redirect where TMServer points to for testing and by adding an entry in a DNS Server I can broadcast the availability of the service to all users on the network.