Most of this should in theory, be possible. Since everything you are running on the server and clients are separate, it is definitely possible to use a different engine for each. The one part of your statement that isn’t possible is using Unity networking, as technically the SpatialOS stack replaces this step (which is how you can have total abstraction between your servers and clients that would allow this to be possible in the first place).
If you look at Unity and Unreal projects, the place they begin to differ is within the workers directory. You could combine these in one project by copying the entire Unreal worker directory into the workers directory for a Unity project.
Then you would need to configure which workers are used in the default launch json file. If you open one of these for an existing project, you will see how it has different sections for specifying the types of workers that are launched. In that file you would need to add sections for the UnrealClient worker you just added to your project with the right permissions type specified. You would also need to delete the section for the UnityClient worker so that SpatialOS doesn’t get confused.
Finally, you would need to go into the UnityWorker directory itself and modify the build.json files so that it no longer builds a UnityClient. This way, when you build your workers and deploy them to the cloud, SpatialOS won’t get confused between the UnrealClient and UnityClient.