You can cache the data. I mean just think about how Git works. You can sync the information at random intervals between peers, and you don't need a direct connection all the time. A well-designed P2P decentralized network solves all these problems. A can send to C through B, if A and C are not currently connected and so on.
In fact, these are solved problems, and implemented in e.g. Freenet as far as I know.
In fact, these are solved problems, and implemented in e.g. Freenet as far as I know.