Don't overlook something else insightful that David wrote:
It's a lot of work to be all things to all people and I keep wondering whether making things simpler and better for 99% of people would be a better choice.
The only reliable way I've ever seen to "make the easy things easy and the hard things possible" is to make the easy things the default without preventing customization of the hard things. That's a design principle for languages, APIs, and tools.
Figure out what's most common (though not necessarily what people think they want, but what they need). Optimize for that. Consider what they might need and don't prevent it.
That's not easy, and what people need will change over time, but if you want to solve problems well, you have to solve the right problems.