The concept you tried to look up is "NAT" (Network Address Translation). As you said correctly, it "masquerades" the traffic from inside your private network as it travels out of it.
If you want to access your webservice from outside your private network, the most precise request you can create is "Request 18.104.22.168 on Port 80" (or another port, although 80 is default in browsers for plain HTTP). This request is delivered to your router, which is not able to do something with it, as its Port 80 will hopefully be closed (which should be the case, except there is a good reason to open it, like your scenario). You simply cannot talk to your Raspberry Pi specifically, if it is hidden in a NAT-Network.
Port forwarding solves the problem caused by NAT (which is imho a hack in itself). You basically have to tell your router "Forward every request from your outside IP on Port XX to Device YYY.YYY.YYY.YYY Port ZZ", where XX is the Port of your router being forwarded, YYY is the internal IP of your Raspberry Pi and ZZ being its Port (probably 80 and maybe 443).
In your scenario, you want your Router to forward every request to its outside IP on Port 80 (and maybe 443 for HTTPS) to the inside IP of your Raspberry Pi on Port 80 (and 443 respectively).
Static IP or Dynamic DNS: You can contact your ISP and just ask, if they offer it. It may cost additional money! You may also use services like DynDNS to get a domain which points to your Routers IP Address. Your router then contacts DynDNS after a change (or the Dynamic DNS service of your choice) to inform it. Using this, the domain always resolves to your routers IP address, even if it changes over time (this is good for testing purposes).
A serious word of warning: If you set up your router to do port forwarding, you open a gate into your private network. If your Raspberry Pi is compromised in any way, an attacker may gain access to your network and compomise other devices, so be VERY careful, if you set this up. Reading about DMZ or firewalls, may be a good idea. Keep this in mind. If your can access it from outside, chances are a malicious person can do it aswell. Make sure your network is configured properly
Edit: You may consider using a Web Hoster for a few bucks to host your website. You can develop it there without exposing your Raspberry Pi in your private network. If this is an option and your project is not about learning something regarding RaspPi specifically, I'd suggest this method. I don't know how much you know about network security, but simply Port Forwarding connection from outside to a potentially vulnerable device inside your private network is a serious threat, if not configured carefully.