I think
JENKINS-26052 would be a natural solution for this. parallel() has a different emphasis from yours.
I also thought about building a library on top of workflow that lets you declare tasks with dependencies and have the library figure out what to execute in what order (including parallelism), which might work well for this, too. The idea is something like the following:
task(name:"foo") {
// whatever computation you fancy
sh '...'
}
task(name:"bar", depends:["foo"]) {
...
}
task(name:"zot", depends:["foo"]) {
...
}
attain "zot" // foo runs, then bar+zot runs in parallel