Note: this is being designed currently, so changes may happen at any time.
In order to let modules communicate with users, libgocr implemens a simple GUI wrapper: the module can open a window with some of the most used widgets (text fields, buttons, etc), and get the result directly. The GUI is very high level, so the implementation can be done in any API you are using to code your frontend. In short, the GUI wrapper is just a message system, allowing the modules to communicate with users, ask questions, etc. The GUI should take care of how widgets are arranged in the window.
Most functions are documented only in the source code while the architecture is not stable yet. Check the automatic documentation.