As I'm only a beginner it took some time find it out but I have it now working in a slightly different way (googling from one direction into a slightly different direction).
I split up my function into smaller subfunctions and used
gobject.idle_add(gui_update, "some text to initialize")
gobject.idle_add(gui_update, "something else I can update")
gobject.idle_add(gui_update, "more text")
gobject.idle_add(gui_update, "finshing up text")
This makes it much easier (at least for me) and it makes sure that all commands are nicely executed after each other. It complicates the python script due to more subfunctions and calls and so on, but I can live with that.
The gui_update function has quite a few parameters to make it possible to update the statusbar, some other progress message, a treeview, etc).
One of my sub_functions contains an "subprocess.Popen", immediately followed by a while loop that checks the outcome. When OK the while loop and thereby subfunction can end/close. This leaves my Gui usable for status messages and so on, and it doesn't result in a Gui that blocks and changes to a dark unresponsive "thing". I'm still looking into the "subprocess.communicate" callback but that's not working yet, hence the less optimized while loop.