I think a good part of this can be contributed to YAGNI. As you said, you spent a lot of time writing tests for code that didn't need to be tested, and code for flexibility you never take advantage of. That's one reason I prefer BDD/acceptance testing vs unit testing (covering a large subset of functionality with one simple test, as you described in your post), and iterative development. In an iterative development situation, especially taking advantage of BDD, you can concentrate on just writing the code needed to meet specifications. If you want to add IoC or other such features, you do so in a refactoring rather than from the start. It has saved me a lot of time following this approach. Glad you've also found something that works better for you!
I personally like simple as well. But you don't want to cross that line from simple to lazy or cutting corners. This leads to mistakes and unmanageble code and as the project expands, like it always does, you may get to a point where you can't go back. I've come across this a couple times.