I'd argue that coherent experience vs "power user" features is a false dichotomy. They are at odds, but you can design a program to have a coherent user experience as long as you stick to a subset of features, and hide the incoherent features away from the coherent interface. That's rather abstract, so let me give a concrete example:
Gnome 3 comes with a settings application that allows you to customize keyboard shortcuts -- on my laptop I changed the maximization shortcuts to Ctrl+arrow_keys instead of Win+arrow_keys, which is easier to press one-handed. Most people probably know this. What most people probably don't know is that you can actually assign multiple key combinations to the same action (say I wanted to add the Ctrl shortcuts instead of replacing the win ones). This option is not present in the settings application gui - you have to edit the corresponding dconf entry and add another entry to the array of shortcuts. This is somewhat cumbersome and the gui still only displays the first shortcut in the array, but it lets "power users" do something niche without harming the coherent experience of "regular users".
The real dichotemy, in my opinion, is between quality software and developer time/effort. And I don't mean to belittle developers here (I am one, after all); getting a split design like this right -- such that there are few leaky abstractions -- is HARD. I found out about the feature due to one such leak: there are a few shortcuts on Fedora that have two default shortcuts (changing workspaces with either Ctrl+Alt+page_up/down or Win+page_up/down), and changing the one you can see (Win) doesn't remove the other one (a problem for me, since I wanted to use the other one for something else, and I couldn't through the gui; I had to remove the second default in dconf first).
Finally, the air quotes around "power users" are because I think it is a leaky abstraction. It's not one group of people who want to customize everu feature, it's a larger group of people who each want to customize one different feature. I think the winning approach overall is to provide a few low level hooks into your application's functionality, that people can use to code their own tweaks.This allows you to get rid of the options that cover a tiny minority of use cases, without losing the functionality. The android todo app Simpletask gets this part perfect with its lua scripting, although the UI is not as polished as it could be given more developer time.