It is possible to write code for syncing when you don't have external ip. but that kind of code is messy, because you keep asking the peer every few seconds "do you have any new blocks"??
All those little messages can add up to a lot of bandwidth if it is not done carefully.
Especially since some of them are mining, and miners want to know about the new block within a fraction of a second of it being available.
Amoveo β₯π§Ώ