It is actually quite fundamental.
Instance resolution works on pattern matching on the type and we need all instances to be "global" and not able to be hidden or locally overridden to avoid coherence problems.
There have been attempts to relax this restriction in the past, none of which are particularly satisfactory.
But basically all of them have run afoul of other ways to get "stuck" when resolving instances, or needing a vocabulary to track provenance of instances, or violate the open world assumptions.
Scala's "implicits" break one way on this, Haskell breaks another. The moment you can even qualify the set of instances you get you lose safety for a lot of things like Data.Set, and many refactorings you can do to code today without care become fraught with danger.
-Edward