This simplicity and isolation of protocol implementation is a major design goal of the network stack. Each channel instance operates on its own strand, and all protocol handlers (and protocol::start()) are guaranteed stranded invocation, so they can be coded as if on a single thread. Above is still early, as the headers need to populate an in-memory graph and reorg into the candidate chain based on strength. But the protocol won't be any more complicated.
(edited)