Is there a way to link against UnityEngine.dll from a standalone .net application?
Does UnityEngine.dll depends on mono to run?
If not possible, could that be done with the mono runtime instead.
The idea is to use UnityEngine.dll but have more control over the linking and startup process.
This is not possible. UnityEngine.dll is a small .NET wrapper around the native Unity engine. Without the Unity engine itself, UnityEngine.dll is merely an empty wrapper around nothing.
There is no way to somehow get access to the Unity API in a homegrown .net application. The UnityEngine API is tightly coupled to its Unity host. They are one, and can't be split.
See also the related question: Is it possible to start Unity from a C# project ?
However, Lucas' answers covers it quite well, so just consider this "some extra information".