I definitely agree that lack of sequence diagrams / state machines is a problem. Yet, I think that the problem of code bloat and unmanageability goes much deeper.
a) Are you aware of Harel's "Come Let's Play"? Harel created Statecharts, then went on to create scenario-based programming (sequence diagrams afaict).
b) I think that calling the approach "pipes" will lead to confusion. This approach is just "message-passing". The name "pipes" has already been taken.
c) I tend to think that code bloat is due to something I call "one language to rule them all syndrome". Grace Hopper called it "we've always done it this way". In my view, we've been piling everything and the kitchen sink into a single paradigm, stretching the paradigm way out of its sweet spot and causing exponential bloat (the equivalent to "state explosion" in state machine lingo). I consider Sector Lisp to be the epitome of "functional programming" (better even than Lisp 1.5 - Tunney emphasizes assembler tricks, but I think that Sector Lisp's economy of size is due to other, more important, factors (like pure functional programming - no assignment, no heaps)). We've been forcing out-of-band concepts into the functional (function based) paradigm for 50+ years, like assignment, heaps, memory sharing, etc, and spinning off different, but essentially the same, programming languages (all of which do not achieve the expressibility of machine code). That stuff doesn't honour the functional paradigm and should have been treated with completely different paradigms and notations. UNIX showed us how to compose programs using different paradigms (languages), but fell short by offering up a text-based shell that ignores issues like multiple input/output ports, fan-out, etc.
d) A flat message bus will collapse under its own weight as we try to address bigger and bigger problems, i.e. "state explosion". Likewise pub/sub will cause accidental complexity and severe hand-wringing. Harel's Statecharts and UNIX processes plus recursive scripts show ways out of this problem, i.e. hierarchies of isolated components. I.E. not just one bus, but a hierarchy of buses, punting detail successively down to lower levels. IMO, the concept of a "bus" is too ad hoc, I like the concept of "wires" better.
e) State machines can cause bloat, too, when used in "one language to rule them all" mode. In my mind a system of communicating state machines is best described by recursive node-and-wire diagrams. Novices attempt to draw node-and-wire diagrams for computational concepts like using "+" boxes to draw "a = b + c". Drawing "+" boxes is bloat. Writing "a = b + c" is more economical when written as text. Communicating state machines should only be used to express concepts that don't fit into the function-based paradigm, e.g. "control flow" (which is a mess in our current function-based languages).