@Reeley I think I've found a workaround to the temporary lock-up that occurs when initializing the solver and placing objects: run it in a separate thread. SpatialUnderstanding is not thread-safe but is independent of Unity. You can certainly run it in another thread of your choosing and poll for completion in an Update() function in the Unity main thread.
I've confirmed it works for solver initialization. Look at System.Threading.Thread to implement a simple asynchronous task mechanism. Unfortunately, this will only work in the Unity editor. UWP requires Windows.System.Threading.ThreadPool.RunAsync() to be used: https://forum.unity3d.com/threads/how-to-get-around-the-threading-limit.249742/
Querying for object placement positions can take a lot of time as well, making it a great candidate for this sort of asynchronous off-loading. However you have to be careful if you intend to use Unity Objects in another thread. I've never done it myself but there appear to be resources online. Alternatively, you can reserve placements using the spatial understanding API in your worker thread and then once completed, instantiate GameObjects in the main Unity thread.
For an example of how I call Solver_Init() in a separate thread, see: https://github.com/trzy/hololens/blob/master/Game-Crane/Assets/Scripts/PlayspaceManager.cs
Specifically, the Update() function, State.WaitingForPlacementSolverInit case.
You will not be able to build this project yourself because I cannot push copyrighted assets to Github but this should serve as a useful starting point.