Perhaps one approach would be to have the compiler split the program into separate programs, which pass each other command lines to run when they are complete (a bit like Javascript callback arguments in the old days). Then the OS doesn't need to know anything, by the time it runs they're all genuinely separate processes, but the developer can still write the code in that expressive way. (Going back to Javascript, a bit like how Babel rewrote async/await before the browsers supported it.)