VuFind 1 makes it very easy to just dive in and start editing things, but this sometimes makes merging in future upgrades more difficult. The purpose of the VuFind 2 add-on module system is to allow you to isolate your customizations from the VuFind core code, which should make long-term maintenance easier. This adds some up-front overhead in exchange for long-term benefits. It should also be fairly easy once you know where all the pieces go, though obviously there’s a learning curve to reach that point (and it’s a bumpy learning curve, what with the software still being in active development and things periodically shifting around).
However, keep in mind that all of the VuFind 2 module/local directory stuff is optional. I certainly recommend using it, but nothing is stopping you from hacking the core code directly, just like you did with VuFind 1.
In the interest of learning the new code and becoming more comfortable, perhaps a useful approach would be to implement some changes directly to get a feel for how things fit together, and then reimplement them in a local module once you are more comfortable with the system. I suspect that the reason you’re finding this difficult is that you are essentially trying to learn so many independent things at the same time (core VuFind architecture, and the extension system… not to mention all the other things you mention). I’m happy to help break this down into smaller pieces, especially since any conversations we have now can probably help contribute to future documentation that makes this easier for everyone.
Perhaps if you could provide an example of something specific you are interested in doing with VuFind, I can provide some pointers about how to ease into the code. If I can find the time, it might even make sense for me to write a detailed blog post with a working example… but even if I can’t carve that out of my schedule right away, we can start this iteratively.