Parece-me que você entendeu muito bem os fundamentos, e a resposta curta é que, se você estiver usando um proxy com endereço público, não precisará de NAT - para os protocolos que são mediados pelo proxy.
No entanto, existem mais protocolos no céu e na terra do que são sonhados em sua filosofia ; nem todos eles são proxiable, e os proxies não existem mesmo para todos os que existem, portanto, o NAT é um recurso útil para eles.
Editar : um proxy é um dispositivo de computação que funciona em um nível de aplicativo. Um proxy HTTP recebe solicitações HTTP para um site remoto e, como você apontou, ele sai para o próprio site e faz a solicitação e passa a resposta de volta para o cliente solicitante. Mas tem que entender o HTTP em um nível detalhado para fazer isso.
Da mesma forma, você pode escrever um proxy FTP, mas ele teria que entender os detalhes dos comandos MKD, DELE, LIST e suchlike protocol, para fazer o proxy corretamente dos pedidos do cliente. Qualquer proxy que queira trabalhar de maneira transparente geralmente tem que entender intimamente os componentes internos do protocolo para poder fazer proxy desse protocolo.
O SOCKS é até certo ponto uma exceção a essa regra, mas isso ocorre porque o protocolo SOCKS coloca em prática uma interface mais geral para o proxy, exigindo que cada cliente seja SOCKSified e, portanto, capaz de tornar o pedidos corretos do proxy SOCKS para configurar o tipo de proxy que cada um requer, o que não é exatamente transparente.