I don't see why C++ is so hated. I mean, it has plenty of flaws but "OO" shouldn't be one of them. There's no reason you can't do "C with classes", or even do straight Data-oriented design with nothing but global functions that operate on arrays of plain-old-data (POD) structs.
But when it comes to a GUI? You almost ALWAYS want OO. That's the one place where OO shines. GUI's are inherently object-oriented. While random physics equations and the execution units they run on have nothing to do with OO (and that's why it's so slow), GUI's are just graphs of contexts.
I mean, I've seen people who "hate C++" go out of their way to implement vtables in C, so they can have classes with inheritance. And I'm like "What is wrong with you?" Instead of poorly reinventing the wheel, why not change "gcc" to "g++" on the commandline and magically have everything work based on millions of man hours of other developer's time?
Use OO or not. Use the right tool for the job. You can even use C++ only for the GUI, and have everything else in C that talks to it through a GUI DLL (which contains all the OO code). Depending on how you split the hierarchy lines, you could get away with it and not spend hundreds of extra hours debugging. You'd have best of both worlds. C for game, C++ only for the GUI.
Or hell, use any language for the GUI. D. Python. HTML. once you split it off from the main executable.
But I think using non-OO for a GUI of any substantial complexity, is the wrong tool for the job. In C# and Android, you can basically "inherit from" any GUI widget in the library, override only the methods you care about (like draw()) and magically add functionality like special font coloring/bolding/etc to a textbox inside of a cellgrid (like Excel) and have it touch NOTHING else. One class, inherited, override one method, and boom. You don't have to touch the data binding code. You don't have to touch random code throughout your codebase. A single function (almost) perfectly encapsulated. I'm no Microsoft buff, but when it comes to GUI, C# and WPF is heaven. (I wish against wishes they'd add WPF to Linux.) Everything is so easy that braindead college graduates who barely graduated can produce beautiful looking applications that (mostly) function according to spec.
 I do think it's funny how Java embodies everything thats wrong (tm) with OO. Tons of boilerplate. And how every book and teacher talked about "getters and setters" like they were life savers, and now, everyone says they're terrible and you should never do them. You should use actions on an object, (almost) never directly set a field. Where getters were "the field can change name! Wow. Like search-and-replace never existed in our text editors..." now they're like "how dare you tell anyone a field exists." But in general, I kind of like the new strategy. It highlights that interfaces should be more "top-down" (how are people going to use this? = interface) than "bottom up" (implementation = interface).