I don't think the problem is in the in-process option.
In general in ArcGIS Server the tool must be in-process, because every time a gp tool is called, ArcGIS Server creates a new process for that call and the tool runs inside it, it's not possibile, for server threading reasons, to run the gp tool outside that created process.
on the other side if you plan to run a gp tool on ArcGIS Server you have to think ahead about how to develop the tool because there are some important differences between a desktop tool and a server tool: not all the desktop tool are suitable to run on the server (and this is true noy only for Python gp tools, but also for Model Builder gp tools)
There are differences in what kind of parameters you can use for input and output, you have to take into account the execution folder that ArcGIS Server creates every time a gp tool is called (in which you also have a special folder containing the Scratch geodb), you cannot rely on the file system in the same manner you do on the desktop, and other things like these.
So maybe the problem is somewhere else, and if I have to guess basing on your description this is the case.
Best Answer
Have you looked into setting up a map template with your prefered map elements? It may be a good workaround for you in the short term.