I wouldn't get too heartbroken if I were you. I think aiohttp's real advantage here is that it is ultimately running a very tight loop, always executing exactly the same code. This means the fact that it has many possible branches is not really relevant: in practice on this test it has very linear control flow, which makes it easy for the tracing JIT to spot what's going on.
In a real application, the measure of difficulty is not how many theoretical branches there are, but how many are actually taken. I suspect that a real application built on top of curio and h11 would have very few branches actually taken compared to an aiohttp application, mostly because their internal implementations are much simpler.
Put another way: the easiest way to be fast is to do less, and that applies even when there is a JIT in the way.