If your RPi's 3G dongle is behind a NAT, even if you could ping its public IP, it would not do you any good, as that is not the true IP of your RPi.
You are at the mercy of the network operator's carrier-grade NAT equipment.
Your problem is solvable to some degree using VPNs.
On a system outside of the 3G network that you control, that is reachable by your 3G dongle, setup a VPN server (such as OpenVPN). Make sure it is externally reachable.
Then, setup a VPN client on the Raspberry Pi, and have it periodically attempt to connect to the server when there is no connection. I believe if you start OpenVPN, it will basically do this, though over a 3G connection you may want to rate-limit reconnection attempts so you don't use all your 3G data trying to connect to a nonexistent VPN server, if you don't intend to run the VPN server continually. Or run it on a schedule.
If OpenVPN is set up correctly, you will be able to ping it and otherwise act as though it is directly connected.
Also, look into seeing if your 3G dongle can receive any text messages sent to its mobile number. Linux support for such a feature may be a long shot, and you may be looking at a lot of research on getting this to work, but possibly you could have something polling the dongle for text messages, and then have that start/stop a VPN or similar.