Not to mention the average developer. I just spent the past few days wrangling NAT-punching issues for a small p2p project of mine. To say "the first rule of p2p is don't do p2p" is an understatement.
The (very unfortunate) truth is that p2p is just more difficult than client/server.
That problem is partially solved by using a supernode overlay structure. It isn't particular elegant, and it relies on certain nodes being willing to work more for the network - but it can enable nodes behind a NAT to parcitipate relatively easily.
The (very unfortunate) truth is that p2p is just more difficult than client/server.