Inertia. The standards are already there, and presumably will have already made massive inroads against the local dialects. It’s very difficult to change your standard language if you already have one, and build a new standard. It’s much easier to just rebadge your existing standard with some tweaks.
So it’s easier to keep standard Croatian Štokavian, than to run around the wilds of Dalmatia and find the most distant Ijekavian dialect possible. It’s easier to keep the Serbian standard and rebadge it as Montenegrin, than to start adding new letters for a newly devised Montenegrin standard. (Bosnian I don’t know as much about.)
Convenience wins here over purity. It’s very important for the local identities that the standards be distinct; but the speakers don’t need the standards to be mutually unintelligible and linguistically impeccable. They need to be just different enough. You could get away with finding the most distant dialects possible in Norway in the 19th century, or Macedonia in the 20th, and enshrining them as the new norm against frigging Oslo Danish or goddamn Varna Bulgarian. But in 21st century former Yugoslavia, Standard Croatian Štokavian was already in place, and it was distant enough from Standard Serbian Štokavian to fit the bill as a distinct Croatian language.
One of the frustrations linguists found when they were helping Australian Aboriginal communities revive their languages was that the linguists were more interested in the linguistics than the community. The linguists wanted to revive a language as close as possible to the pre-invasion language. Some communities were content to just have their local variant of Aboriginal English embellished with a dozen words from their original language. That was enough for them to have a distinct symbol to rally around.
Disclaimer: I may not actually know what I’m talking about.