Gecko is architected to be used as a framework, not a library, which means it tries to dictate a lot of aspects of how your code is supposed to be structured. Whereas Webkit/Blink is the other way around.
It predates KHTML/Webkit by several years so some additional legacy baggage is to be expected.
I read a post here on HN a few months (years?) ago where a developer was really trying to use Gecko for their own application and got frustrated so much that they gave up and switched to Chromium.