Unfortunately, IPv6 addresses have to be assigned by someone, and they typically change when moving around/changing provider. And you have to go trough the firewall...
I prefer something you can generate yourself, like encryption keys. That's the approach taken by yggdrasil (and cjdns before): generate an encryption key, map the public part to an IP address (there's almost enough bits in v6). Plus, it can easily be end-to-end encrypted.
Another plus is that you can generate as many as desired.
As for the protocol, Matrix is experimenting a bit with going p2p.
https://yggdrasil-network.github.io/