I always try to start my answers with a bit of background first.
NAT as you know, is used to reassign the private IP addresses of client machines inside a network to be published. One of the advantages of NAT is that fewer published (or officially assigned) IP addresses are required because the NAT can reuse the same IP's at different times. For security reasons, another advantage is that the internal IP's are never made known outside the enterprise.
With this in mind, a disadvantage of NAT is that some protocols, such as IPSec and L2TP, cannot pass-through the "translation" process. Both the IPSec and L2TP/IPSec are not able to do the automated exchange of keys across a NAT.
A VPN is a private channel typically created across a network (like the Internet) that connects two computers. The VPN client connects to the VPN server using a tunneling protocol, such as PPTP. Both the client and the server much have IPs assigned. PPTP can be used for both client-to-gateway and gateway-to-gateway scenarios. PPTP can pass through a NAT. In fact, Microsoft recommends that PPTP be used in scenarios that require a NAT-capable VPN connection.