Languages like C also make it notoriously hard to layer/decompose stuff. Why does DNS resolution and proxying need to be part of this state machine? I'm not saying that Go's net/http library is perfect, but at least it got this part right. The http.Client type uses a http.RoundTripper to do all of its networking. Separation of concerns.
(meaning: blaming "state machine layout" on the capabilities of the implementation language seems a bit of stretch to me, since async-await language support is essentially just (very high level) syntax sugar for a function that consists of a switch-case block and takes a context pointer as additional argument).