The HostAndPort type is just a representation of the address of a service on the network. The me() functionality is really about inspecting the current server process to determine its own best identity. This functionality is not about naming in general, but about naming the running server in particular, and so doesn't belong in the HostAndPort type and library.
The only consumer of this information is replication when you initiate a replica set with no config information, in part because the result of HostAndPort::me() is not always the best name for a node. For now, we should move the behavior into the consumer, and consider eliminating or improving it later.