I'll read your specific case deeper when I get a moment, but here's where I often end up pointing people. It was written pre-GAT and some of the lifetime-parameterized traits could probably move the parameter to a GAT.
The core issue is that Fut can't be a type parameter, because type parameters resolve to a single type, whereas you need a type constructor (something parameterized by a lifetime -- a different type per lifetime). Since you don't have a concrete type constructor like &_ handy, you need to emulate one via a trait.