Well, this is just a matter of refactoring some stuff here. You can notice that most work is defining several small callbacks so its not really that complex. I tend to use that style of nested let's because it saves the time: no need to write boilerplate parameter passing, just use what is defined in scope. If you cut out callbacks and GUI code you are left with literally 8 non-empty lines. Its not that bad for a main.
Can you actually point to any GTK MVP framework out there?Honestly I don't see why do you think Haskell sucks here. This is just plain GTK. If anything it is better with Haskell thanks to static typing, higher order functions, great runtime with GC and other stuff. Equivalent application in plain C would be much longer and carry more bugs, and Python GTK apps are a mess really.