Establishing Point-to-Point Connections in libp2p

A common example included with most libp2p implementations is the chat example. In the example, a Floodsub topic is established and is used to pass messages to connected peers.

Am I correct in assuming that any peer that knows the Floodsub topic (and is reachable, of course) could join the chat and also receive messages? Additionally, is this done purposefully in the chat examples, or is it a hack to achieve point-to-point communication via libp2p? What would a minimal example of a simple point-to-point connection between only two peers (possibly both behind NATs) look like using libp2p? (language agnostic, but Rust is preferable).

I apologise in advance if this these questions constitute low-hanging fruit, but I’m having difficulty with building a conceptual overview of the project right now. Recommended resources are very welcome!