You couldn't reliable set up e.g. multiple uplinks with static routes. If one goes down the route would still be there and the ISP would try to send traffic over that (inactive) link. The whole point of BGP is to make routing dynamic and resilient - There is (usually) never only a single path to a network, but multiple over different paths. So if one goes down, there are still others available - they might be slower, longer or have a low preference set, but they are still there so the prefixes are still available.
BGP works; it has been there since the dawn of time and has proven to be reliable and has been refined and hardened over the years (ROA/RPKI). Human error will always haunt _every_ service, no matter how well designed the protocol/service is; this has nothing to do with BGP. With properly configured BGP it is much harder to bring a network down by accident than by mangling static routes and (huge) routing tables by hand or somehow automated/scripted. (been there, had to do that for a crappy uplink with LTE-backup, would never want to touch such bullsh*t again)
AWS and Microsoft brought down their clouds (multiple times) without any involvement of BGP, purely by other bad design decisions... (e.g. MS placing all servers for an essential background service in a single DC...)
In the case of FB, they made the assumption their backbone from their "edge datacenters" to the main DC would never go down. To prevent malfunctioning servers from being available to the world it seems they thought it would be best to just let them revoke their routes if they can't reach their backend - but as their backbone went dark, all DNS servers revoked their routes; effectively killing all DNS for their zones, hence everything else that relies on DNS (hint: almost everything) also stopped working and even more routes were revorked.
Some static routes *might* have worked here to some extent, but static routes are a nightmare to maintain even on smaller networks, let alone in multi-homed AS or huge networks consisting of multiple AS. You absolutely have to use a dynamic routing protocol here, and BGP is the best and agreed-upon standard for inter-network routing.
Internally you can always set up multiple routing protocols; e.g. OSPF; and you can even exchange routing information between different protocols - but then you again start to make it complex and errors or unforeseeable events will propagate and might again cause a chain reaction.