NAT Restrictions can occur either when a Port is already in usage, or when a Port is being Actively Blocked.
Typically speaking, nowadays most Routers used Port Triggering and Forwarding … this means that it'll Trigger the Activation of a Port based upon Demand, and should the Port not be "Whitelisted", it'll Automatically Forward it to the next Port available within the Range.
(Remember each Port can ONLY be used by a Single Connection / Device at any given time)
Now unique to all of this are Ports 80 (TCP Default) and 443 (UDP Default).
And these are what will be defaulted to, if the attempted Port Range fails... hence why you should always be monitoring Port 80 and 443.
Just keep in mind that these will be congested, with the potential to drop packets or have increased latency due to packet queues.
Another issue with these Ports is that, there's no way for the Router to know which Port it was originally SUPPOSED to be Sent / Received from.
The way that NAT "Punch-Through" works... is you setup Multiple Connections (typically 1 Per Client).
(which you ensure can actually initially connect and you're not entirely NAT Restricted)
In this regard, if a Port becomes unavailable; you can just switch to the next "Open" Connection.
Frankly a lot of these headache could easily be resolved with ISP switching to IPv6 Support., and it's somewhat ridiculous that most haven't yet.
Still, I do recall that IP Tunnelling can be another quite effective technique.