If you're the one writing the ISRs for all the hardware, you could stack any type of hardware on the same IRQ. That never happened in practice though, because the people making your hard disk controller are probably not the same outfit making your bus mouse board. DOS wasn't (and still isn't) an accepting environment for FOSS, for whatever reason. Everyone else's code is essentially a opaque black box that is not interoperable in the same way as something like interrupt routines on Linux.
The serial port stuff was an exception for a variety of reasons. Usually the high port-count serial setups used hardware from the same mfg., and once you're up into 8-port territory, you're probably using co-processed boards anyhow (DigiBoard and Cyclades-like hardware).