CALL is a specialization of a more basic CALL*, which forces it to wait:
/extensions/process/ext-process-init.reb#L58
So you can just use CALL* (which is itself a layer that does some usermode preprocessing over parameters before they get to CALL-INTERNAL*. For anything not performance-criticial, it's best to avoid trying to write it in C where it is harder to change, so the C code tries to keep it to the bare minimum of what's needed to expose the system functions).
There's actually some kind of interesting code going on here, glossing the command line differences between Windows and POSIX. Windows operates on the basis of one big command line string, while UNIX expects an array of individual elements.
So if you're on POSIX and call with a single string, the native code hooked to exec() and pipe() will call out to the usermode parse-command-to-argv*
And if you're on Windows and call with a block, the native code hooked to CreateProcess will call out to the usermode argv-block-to-command*
I've written about this and I think it's neat.