I've created an issue at hyper repo, and decided to also post here to involve more people.
The summary is we need a layer of connectors. A
Connector is a piece of logic that establishes a connection in a connection-based protocol. Connectors can usually be composed (i.e. work atop of each other, like HTTP works over TCP), and having a layer of connectors would enable us to write more composable libraries and more flexible programs.
I'd like to avoid copy-pasting the body of the issue everywhere, so please go to https://github.com/hyperium/hyper/issues/2078 to learn more.