Some people say that Laravel’s facades are optional, and if you don’t want to use them, then you can use dependency injection or the helper methods instead.
Laravel does have a powerful DI container. I have tried to go as facade-less as I can, but again I’ve found routing to be a pain.
Using some of PHP’s magic methods, Laravel likes to proxy calls. A lot. The obvious examples are, of course, Facades. When you call something like
Cache::get('something'), Laravel proxies that call into the container and whatever service is required. There’s even an explanation in the official documentation.