Timing and scalability are probably the biggest issues with realtime P2P applications. Scalability is becoming a bit less of an issue; with mid-splits becoming the norm on cable internet services and 5G SA rolling out, there's just a lot more bandwidth to go around.
Timing issues can be worked around and GPS modules are cheap.
NAT problems aren't usually that bad. Only a minority of networks use symmetric NAT implementations, with most seeming to be using port-restricted cone NAT (EIM/APDF), which can still communicate with any other NAT implementation using endpoint-independent mapping (EIM). Most CGNAT implementations that I've encountered use EIM, with some also doing endpoint-independent filtering (EIF). Between UDP hole-punching, UPnP, NAT-PMP, and IPv6, it's usually possible to establish a P2P connection between 2 endpoints.
A game could use a hybrid client/server and P2P model, with the option to run entirely P2P while accepting its limitations.
Timing issues can be worked around and GPS modules are cheap.
NAT problems aren't usually that bad. Only a minority of networks use symmetric NAT implementations, with most seeming to be using port-restricted cone NAT (EIM/APDF), which can still communicate with any other NAT implementation using endpoint-independent mapping (EIM). Most CGNAT implementations that I've encountered use EIM, with some also doing endpoint-independent filtering (EIF). Between UDP hole-punching, UPnP, NAT-PMP, and IPv6, it's usually possible to establish a P2P connection between 2 endpoints.
A game could use a hybrid client/server and P2P model, with the option to run entirely P2P while accepting its limitations.