view_update is blocking, because the data it needs to export is also accessed by the rest of the UI and tools. I guess this is what you mean by update_stats not working, that it doesn’t redraw the UI during view_update? I think test_break might work to detect if the user presses escape key, but that’s not great.
Cycles makes a distinction between exporting the data from Blender, and then doing things like loading image textures and building the BVH, which helps a bit. Not sure if you do or can do something similar. Other than that it suffers the same problem.
In general for this kind of heavy blocking operation we would like to keep the UI responsive, for example when opening file or subdividing a really heavy mesh. But the infrastructure is not there for it at the moment.
Cycles does most work in its own thread, and also calls update_stats from there. So you can show progress also outside view_draw, just not while view_update or view_draw is blocking the main Blender thread.