I think it is possible to have a complicated product that is made easy to use and has extra features that get 'exposed' over time for your power users to find, preferably just when they need them the first time.
Complexity per-se has nothing to do with it, (over) complex problems fail just as fast as overly simplified products.
The trick is to match what your application is offering to the user in such a way that the context determines what face the application puts on it's capabilities.
Mobile phones fail spectacularly in this respect, often used features are stacked 6 down in unnavigable menu trees, never used (but commercially interesting stuff for the carriers) sits near the top.
There are many examples like that.
But there are (fortunately) also examples to the contrary.
Complexity per-se has nothing to do with it, (over) complex problems fail just as fast as overly simplified products.
The trick is to match what your application is offering to the user in such a way that the context determines what face the application puts on it's capabilities.
Mobile phones fail spectacularly in this respect, often used features are stacked 6 down in unnavigable menu trees, never used (but commercially interesting stuff for the carriers) sits near the top.
There are many examples like that.
But there are (fortunately) also examples to the contrary.