Yes, these are both good approaches. I also came to the conclusion that, in general, there is no escaping writing C code (or something like it) for launching asynchronous tasks.
As for ParallelSubmit etc., I did get an example working with LocalSubmit, though it took a bit of finagling. You can find it under the scope section here: https://resources.wolframcloud.com/PacletRepository/resources/ChristopherWolfram/WebServer
I also had problems killing the LocalSubmitted task, or getting it to share variables with the main kernel, which sort of defeats the purpose.