Interesting. I do tend to favor protocols that are a bit lower level and more flexible for composing higher-level functionality. Though this does sound pretty complicated to implement using only what capnproto offers right now. Would there be a way to jury rig "request(n)" backpressure as described in reactive streams[0] (also implemented by RSocket[1]) on top of capnproto? That's what I'm using for omnistreams and it's proven very simple to reason implement and reason about.
[0] https://github.com/reactive-streams/reactive-streams-jvm
[1] http://rsocket.io/
[2] https://github.com/omnistreams/omnistreams-spec