Cuando ejecutas el Teamviewer, tanto tu como tu cliente, os conectáis al servidor de Teamviewer (que si tiene los puertos abiertos
) y el es el encargado de poner de acuerdo a ambos en el siguiente paso.
El siguiente paso es usar este "truco" para engañar al NAT de los dos router:
http://en.wikipedia.org/wiki/UDP_hole_punching
No es un método muy ortodoxo pero funciona
Pero para el caso de un servicio web lo mejor sigue siendo abrir los puertos del router como "dios manda"