I think it really depends on the definition of "good", or the purpose of "being good".
For example, let's consider Java.
Most jobs wouldn't settle for you being good in the core language, they'd expect you to be proficient with specific APIs (e.g., Swing for GUIs) or even third-party APIs (like all the Apache stuff). You don't necessarily have to know every corner case.
Academic and industrial research may require you to really know the language inside and out. For example, if you write a static analysis tool or a compiler optimization, it's best to know of the edge-cases.
In education and in QA, it's often important to know all the weird corners and their risks. This is typical with C++. In education, because you can count on students making these mistakes accidentally. In QA, because that is where some of the weirder bugs lie (E.g., race conditions in static initialization).
As for how features are implemented, I think you can be a great programmer without knowing how certain things are implemented (e.g., details of the VTBL in C++), but it's important to know how other things are implemented (e.g., garbage collection, memory management, some libraries) to write really good and efficient code.