I'm really starting to wonder if Allegro 5+/"6" should have a different API mentality. Ever since I learned about "the common case should be default/easy" for data-oriented design, it really makes sense. In my opinion, everything in Allegro should be defaulted unless you opt out.
allegro_init() should give you every common case "for free". (Or at least have one new function that does that.) Graphics (at default desktop depth), primitives, jpeg/png/whatever input, sound, a single event queue with the mouse/keyboard/joysticks attached, and even a FPS timer occurring once a second with a variable you can send to print (or even have one that hijacks onto al_flip_display and overlays it automatically in the corner).
And, when you want something different than the default, you override those defaults. Default depth is desktop depth, until you manually ask for it. etc.
This would likely be easier in C++ with default arguments, but perhaps with some kind of C method/functioning chaining it could be done.
The people who know what they're doing, are used to writing lines of code for "on the metal" features. The people who don't, should already be in an environment that lets them play around instead of a crash. Maybe the color depth "is wrong", and they can google it/ask about it. But there will still be pixels on the screen which will help them diagnose the problem.
Also, one great thing about D (not suggesting we port it for everyone) is the built-in asserts that allow you to pack a message in. In debug mode, asserts catch a file missing, or a addon not initialized, and halts the program. But you also get a custom message with the assert. "You failed to initialize the addon!" Instead of just a line number in a piece of code. Maybe C supports that (with macros?), but IIRC it doesn't.