Alternatively you can install your own timer interrupt for a higher precision counter you can monitor.
Typically we wrote directly to the sound hardware back then, but if you're looking to have all that complexity abstracted (it isn't really that bad, there's good documentation out there and these are pretty simple devices), you could use the old DOS version of the Allegro library.
As for audio, I'm afraid I have no suggestions. My memory is blurry, likely because audio programming in DOS was very not good.
It was a breeze for programmers, but a bane for consumers as it wasn't really compatible with the SB yet not cheap.
But as dosbox emulates it very nicely, it sounds like a good match now.
You don't need a sound library. You just need to know how to talk to a SoundBlaster. Virtually everything was compatible, so you were good to go. A library is only adding Points Of Failure. Programming a sfx card was way easier compared to nowadays.
This. Replace "sfx card" with almost anything except new ones. The list would include: ios/android app, web site, etc. There's a feeling that we keep stacking an unneeded complexity in layers.
A feeling? ... Ever since the OOP nonsense started decades ago, adding more and more bureaucracy to programming has been the norm. Nowadays we live in a world where programmers suck, because they've never learned to actually program the computer! Instead they've learned how to use programming languages, aka dealing with all the unnecessary bullshit I call bureaucracy!
Once you start piling Bureaucracy onto something , more and more will get stacked on top of it.