I've had the same problem at times. It's kind of a mental masturbation; adding more abstract structures and more higher order functions.
Need to strike a balance between Get Shit Done and leaving behind code that isn't a pain to maintain.
In fact, often the kind of abstractions I've created when I'm in that masturbatory mode described above, it turns out that the abstractions aren't worth it in the end because they're only used once, and it doesn't actually make the code cleaner or easier to maintain going forward!