Interoperation with libp2p?
Note: I'm not part of the libp2p team, I just enjoy working on stuff exactly like this. Thinking out loud: NAT traversal can use a rendezvous node, hidden services are an intriguing option. An evolution to this is for libp2p streams to carry tor frames, and is trivial to add to libp2p. I understand that many applications may want preferential treatment, and I'm not arguing that libp2p is somehow more deserving.
There are two wants I believe would benefit libp2p. This first is to be able to advertise libp2p network in the directory, a 16bit network ID would be sufficient(where about 16 networks could be advertised). The second is to be able to send tor frames that unwrap to libp2p frames once they reach a node advertising being part of a libp2p network or networks(by way of using masking bits). I feel the second could be accomplished with hidden service, but it feels more natural to want an RPC.