How did 鳥 end up a Kangxi radical but not 烏? 烏, wū, crow, 10 strokes, 灬 radical
鳥, niǎo, bird, 11 strokes, 鳥 radical

All the way since at least seal script, 鳥 seems like just 烏 with an additional stroke. They both describe birds in one way or another. Why was 烏 not used as the building block, as a separate radical, or even as a –1 stroke variant of 鳥?
Radicals are not building blocks of characters, they're dictionary entry organisation headers. They're equivalent to the first letter in an English word. The radicals are chosen so that some characters are easily and obviously grouped under these headers, but some radicals are very arbitrary (see e.g. Radical 4 and the characters grouped under it).

The optimisation of a Chinese dictionary (at least the Kangxi dictionary) is concerned about how to organise 50,000 characters whilst choosing the number of appropriate dictionary headings (radicals) to split these 50,000 characters under.

In this light,「烏」is less suitable than「鳥」as a header, because many more characters are clearly grouped under「鳥」rather than「烏」. However, if one looks at Shuowen Jiezi, which has 540 radicals (as opposed to Kangxi's 214), one has more leeway in including radicals; indeed, Shuowen has「烏」as a radical.