I decided to put all of the logic for the application into the server and have the client communicate over TCP, even if the client was the process that actually _started_ the server. The reason being there would be no difference between a local client and a remote one, just the IP address it would connect to.
The solution is going to be moving logic (and Apple Events) back into the main app, still running the socket server XPC service, but forwarding messages to the server which remote clients can receive. Luckily most of the code will still work, I just need to change how it all fits together.
A resounding "OMG it fucking works!?" from the refactor.