I haven't read your full post as I'm in a rush to search something before I got out onsite.. but this may be what you want after a glance through your issue.
Just create a VirtualHost (Or ISPC website) for each of the domains you want and using NameVirtualHost would match each by the requested hostname ( www.yourdomain.com
In the HTTPD Includes add the following for each and change the IP as such.
ProxyPass / http://192.168.1.20:80/
ProxyPassReverse / http://192.168.1.20:80/
You will need the ProxyPreserveHost to retain the hostname variable so most applications that use it report the proper information (ie. php's $_SERVER['SERVER_NAME'] )
each proxy forward virtual host points to all the servers and it works fine.
The only other thing you want is probably to patch the ispc so the VirtualHosts listen to *:80 which is not _really_ required but makes maintaining the DNS with a private IP easier.
btw, the router can't determine the sites without inspecting the packets.. you need a forwarding proxy (or a master ISPC server to handle all connections and forward to the correct server once it knows which site and where to redirect the requests)...
gotta go, wife bitching to leave.