the reason ISPs try to stay away from NAT is that NAT does not mix well with redundant links and redundant routers. for example, if your network is "flat" (without NAT), you can add additional links between your POPs, and let OSPF manage the routing. you can add additional capacity like that, and if a link fails, OSPF can navigate the traffic around the problem.
if NAT done within this network, OSPF (and any other routing protocol) stops to work. as a result, with NAT you force yourself to non-redundant links, and whenever something fails you loose service and you have to run and fix it immediately.
similarily, with NAT it is hard to manage & test the network from a single place. you probably have to log in from one router to the next router, and from there login to the next router, and so on.
if you design it right, you can still for example do NAT at your border router to the internet, and then run OSPF within your network. the key is to not do any NAT *within* your network.