most people drive cars, and yet have very little understanding of how it actually works internally. As long as the interfaces are well designed, this works fine for most.
That's fine if you use your car for commuting (= casual projects with no special requirements) but not if you want to compete on the race track.
Of course you can optimally keep out of the dependencies, and a lot of people don't even think about digging into them and unnecessary limit themselves, but as I said in my initial comment, every bigger project I worked on involved tweaking dependencies in one way or another.
To run with your analogy — which I don't find particularly constructive anyway — people who are just starting to drive don't start by competing on the race track.
I'd say rally driving is the best analogy. Not only do you have to drive the car at peak performance, you also have to perform ad hoc repairs halfway through a stage
I say the same is for haskell.