Fun scientific paper talking about the odd rarity of *b in the current Proto-Indo-European reconstructions. It doesn’t propose why this happens, but it claims that most PIE instances of *b might be actually from a later stage of the language, that the author calls “Indo-Celtic” (the common ancestor of all IE languages minus Anatolian and Tocharian; also known in the literature as “core PIE”).
On why *b is missing: this is just conjecture from my part, take it with a grain of salt.
The typical *T D Dʰ (voiceless stop, clear voiced stop, murmured voiced stop) is a typological oddity; and usually, when there’s a missing labial stop, it’s the one with the highest VOT. That hints for me that that missing *b wouldn’t be a *b on first place, but something else, at least before the Core PIE (Indo-Celtic) vs. Tocharian split.
Based on that I’m tempted to reconstruct the *T D Dʰ series as *Tʰ F T respectively, where F = fricative, of unspecified voicing. In this case, the “missing” phoneme would be **ɸ~β instead. Fricative fortition isn’t too uncommon (see PGerm */θ/→ German /d/, as in “drei” three), but for **ɸ~β there would be another route, merging with *w instead.
I also believe that the current reconstruction of PIE is a diachronic mess; there’s potentially, like, one millennium? two millenniums? between Early PIE and Core PIE - the difference is comparable to Italian vs. Latin, or English vs. Old Saxon. This pops up in special for the vowels (I don’t buy the *e ē o ō i u system), but that missing *b oddity might be another reconstruction artefact.