If I linked my domain name to that ip address, the gateway I am on would have no way to know where to route the packet on the subnet it is connected to.
Let's recap what you've described: the gateway here has a public-Internet-facing IP address (the one you see when you visit WhatIsMyIP?). It also has a private-subnet-facing IP address. The gateway does network address translation (NAT): it translates the (public, shared) destination IP address in incoming packets to the private IP address of a host on the subnet, and it translates the private source address of outgoing packets from hosts on the subnet to the public IP address of the gateway, which is shared by all hosts on the subnet.
(Image source: FileZilla Wiki, licensed under GNU Free Documentation License 1.2)
You've correctly noted that in most cases, a NAT can forward outgoing traffic, and receive incoming traffic for established sessions (that's how you can receive data back once you contact a website, for example), but it doesn't know how to forward incoming traffic for new sessions.
The solution to this particular problem is NAT "port forwarding" or "port mapping." To use this, you would define port forwarding rules on your NAT device (e.g. router) that say, for example, "Packets received on TCP port 80 should be forwarded to 192.168.0.44."
(You may face other problems that are not solved by port forwarding, however. For example, if you haven't paid for a static IP address, your ISP may change the public IP address assigned to your gateway whenever it feels like it, which will break your setup.)