Kleene Algebras (which compose via sequencing, choice, and repetition) map so well to sequential programming that I currently believe, yeah, we have them[0]:
- cf ';', case, and while
- Hoare triples map nicely into a Kleene Algebra. I suspect the rise of structured programming tanked adoption of formal methods, because informal methods sufficed, where they may not have had we continued with spaghetti coding.
- matrices/graphs of Kleene Algebras also form a Kleene Algebra, so the state machine[2] a "structured program" compiles down to is still expressed in the same paradigm.
- Kleene himself was originally modelling neural networks, not sequential programs, and he still arrived at the same theory.
So if we're looking for new control structures, they're probably to be found in non-sequential programming.
- unix '|' is a nice example: 'f | g' is not strictly parallel, because f can only run a finite amount ahead of g, which I'm guessing was a deliberate design decision.
- and sometimes not even there? NESL had novel control, but it implicitly followed the data structure[1].
[0] modulo Duff's Device, but so far even that seems to be unique, and not a whole family of too-narrowly-useful control structures.
[1] the 1962 formulation of APL already has a number of primitives suitable for parallel jobs. I have wondered if people in the Unit Record Equipment days often sped up computations by breaking decks into pieces, running them through a gang of machines, and recombining the output decks. However, the oldest APL person I've had contact with was still too young to remember those times, so it remains a hypothesis.
Edit: [2] upon reflection, this would explain why we have these three classical control structures: anything that doesn't really fit into them gets coded as a state machine, which does. Eg. https://arxiv.org/pdf/1109.5416.pdf is a recent rediscovery of a program derivation technique I've seen used elsewhere by at least Hehner and (IIRC) Pratt.
One possibility for going beyond: if we think geometrically, sequencing corresponds to snapping two paths together at a common endpoint to form a new path, choice to splitting the path into multiple paths (leaving a hole instead of a face between them, where 'if' often explicitly marks the beginning of a split, but any join, unless one is using ϕ functions, remains implicit — cf "comefrom"), and repetition to joining into an ancestor, forming (per Euler) a new face. So 0-d points are sets of states (iow: predicates), 1-d paths are maps, and 2-d faces are loops. What would a 3-d volume be, if anything?