The awkward thing about BIOS is that it was a second OS from the first day on – while the reasonable philosophy behind firmware should be: Start the board, load the OS and go back into your flash until reboot.
My history lessons may be failing me here, but IIRC the main reason for that was memory: DOS wasn't a full OS in the modern sense, it was pretty much just a shell and a collection of utility programs. All the actual device driving was done by the BIOS. So if you compare it with a modern GNU/Linux machine, the BIOS was equivalent to Linux and DOS to the GNU parts.
The original IBM PC had so little memory that they couldn't really afford to waste any of it on stuff like device drivers. So they put the drivers in flash where they could be executed in-place, which became the BIOS. Most of DOS itself (essentially the command.com shell) was just unloaded whenever you launched a program and re-loaded from disk afterwards, and while the program was running it mostly interacted with the BIOS directly.
So you're right that from our current point of view that having callbacks into firmware makes little sense, but back then they were working with what they had and it was pretty much the only way to get as much out of the machine as they needed. The BIOS was really the first OS on the platform, and all those later ones that implement their own drivers (Windows, Linux) are breaking with the intended paradigm.