It is just plain IP routing. The only issue is, that you cannot do PAT (=NAT with overload) on datagrams with IPsec. This is while the transportlayer (GRE) has no concept of ports. PAT only works on protocols like TCP and UDP.
When you are using NAT, it works while you are doing the translation on layer3. You will need multiple public IP adresses to do this.