In a fun and meta sort of way you are saying D has not tried to please you. There are structural problems with this kind of criticism btw I have upvoted your comment, I do share the vision of a small elegant language yet sufficiently powerful language. At the same time I if some parts of D were to be thrown out I would find a way to complain about it. In fact one of my gripes is that it does not have compile time sum types and pattern matching, that and lightweight and efficient fibres (I believe these abstractions still use OS's threading mechanism underneath, I would be very pleased to be proven wrong).
The thing is D initially wanted to be C++ done right and then C++ done better. So with that in mind it has to have a lot of features. I do appreciate a lot that D feels a lot more homogeneous and designed rather than built up with unrelenting accretion the like C++. An aspect that I quite like is that if it is not immediately clear what should be the right way to resolve a design problem (for example name clash between function overloading and specialization) the D tendency is to make it into an error till the right solution/semantics emerges. In C++ sometimes the choice is somewhat arbitrary: here we have k choices lets pick one and go with it even if it has nothing obviously convincing going for it.
I would like to draw your eye towards templates and template metaprogramming. It really feels bolted on C++, and its really tortuous to use. In D however, although it was added much later it gels very nicely with the rest of the languages. Template metaprogramming is nothing special in D. Its just a function like any other except that it and its arguments are evaluated at compile time. (for D developers reading this, please can we have reference counting for CTFE).
So yes you are correct, it has a lot of features, given D's design scope that is hard to avoid, but these features do fit well enough with each other for a practical language to be used in anger, and fit a lot better than its immediate rival C++ / Java.