Is it possible to create a p2p system - say for direct chat or file transfers - where the ip address is never exposed to the clients? I assume at the very least a third party server could handle IP address mapping or can even this be avoided somehow? The idea is to avoid a single point of failure, attack or censorship.
You could look into using routing protocol such as TOR, I2P or Freenet. These provide some anonymity by hiding the true source of the messages while also avoiding the single point of failure and/or attack vector of having a central server that all users connect to.
Note that throughput is often significantly lower than with direct connections, and latency is usually several orders of magnitude longer (due to the packets being routed through several nodes in the network).