Как происходит соединение peer-to-peer, если оба человека сидят на внутренних ip (за NATом)?
Либо дырявят свой НАТ с помощью UPnP, либо используют для связи UDP, а координаты второй стороны получают от общего сервера. Примерно по такой же схеме работает VoIP за NATом (смотри протокол STUN).
Ну NAT же ответы каким-то образом передает обратно запросившему абоненту.
Следовательно ожидает, а потом принимает, и  пересылает данные пришедшие к нему на определенный порт с определенного адреса отправителю.
Зная механизм NAT можно его обмануть - для этого второму абоненту надо отправить данные имитирующие ответ сервера от которого ждут ответа.  В результате такого обмена устанавливается соединение.
Способов обмана NAT - великое множество, но не все и не всегда работают.