Emacs 25 introduced the function `make-process` for creating asynchronous processes, which is lower-level than `start-process`. In particular, you can separate `stderr` from `stdout` by passing a buffer or pipe as the function's `:stderr` keyword argument.

See the Emacs Lisp Manual node on [Asynchronous Processes](https://www.gnu.org/software/emacs/manual/html_node/elisp/Asynchronous-Processes.html) for more information.