Well, isn't dependency injection just a more cumbersome way to say 'function arguments'? Dynamic scoping is exactly the same, it's basically equivalent to extra implicit function arguments that are passed through everywhere.
And yes, dynamic scopes can be useful in specific cases. What's wrong is having your variables scoped dynamically by default.