Both "dumb" and abstracted code can be hard to read and change. The most important part is consistency.
It is generally easier to write dumb code that is consistent. It requires less mental energy and is often a very good starting point for refactoring into something more declarative and DRY.
The pain comes from inconsistent code, often either based on wrong previous assumptions, premature optimization or time pressure.
You cannot imagine how I'd value having really dumb looking code in my life.
Yet here I am, swimming in a swap of cleverness that I can't refactor nor will ever be able to wrap my head around.
I envy you.