you don't see a problem with using the same name for multiple machines?? Really??
If you can not run a reverse proxy, and your limited to 1 public IP then still use fqdn to point to the machine on the outside..
So you have hosta.example.com point to 1.2.3.4 on outside, hostb.example.com point to 1.2.3.4 on outside
If you want to run the same services on these that use the same port, with your limitation of 1 pubic IP then yes you can use different ports so
hosta.example.com:portA hostb.example.com:portB on the outside those point to your 1.2.3.4 address
On the inside
hosta.example.com points to privateAdddressA and hostb points to pirvateaddressB, etc.. Problem solved users on outside can use the same url http://hosta.example.com:port as the users on the inside. Just with split dns uses on outside resolve to your public and your forward forwards to correct private via teh port being used. On the inside the uri points directly to the machine in use. And does not have to reflect of anything.
No matter what if your private side server changes IPs you would have to change the port forward anyway.
Your trying to leverage a work around of only having 1 public IP by using different ports to get to your multiple private IPs… When in a real setup you would have different public IPs for your multiple services you wanted to run on the outside that used the same port.