We've been making some strides towards Julia being easier to embed lately. Calling exit in jl_init is definitely no good – that should be changed to return an error code that can be trapped and handled appropriately. It would be helpful to know what error message you're getting.
The use of global state for the Julia interpreter is unlikely to go away, although it is certainly possible. It may, however, be easier to have multiple independent Julia interpreters in a single process with separate Julia Core/Base/Main modules. If the interpreters are going to be in different threads, there would have to be locks around access to mutable global structures, but that might be ok. Unlike, say Python, there's no interpreter, so there would be no GIL – once code is generated, it can freely execute without different threads blocking each other. That would actually be a rather interesting project. You also have to be aware that many of the libraries that Julia uses are not threadsafe.
Regarding startup time, we do have the ability to load a pre-compiled system image from a .so file these days, which takes about 0.3 seconds on my system – that's not super fast, but it's ok. If you're giving the wrong path to Julia, it's possible that it's not finding a system image, then again, if it's not finding the system image, it's probably not JITing anything.