This is really cool! One thing you could do with Halogen 5 would be to use the “low-level” component representation, which can hide the internal query type, and proxy queries/messages directly to the child.
I’ve also really wanted to implement transition primitives on top of halogen-vdom so they could be shared by spork and halogen. Have you ever looked into how halogen-vdom works?