Because it conveys relevant information. If you were on version 7 and the new version is version 13, a message is conveyed that there have been several major iterations since your last upgrade. Numerical versioning schemes (in general) make it simple to know if you're on a current version, and if not, how far off you are.
Now consider trying to make similar determinations if you know you're running "Gingerbread" but the latest version is "Jelly Bean", or if you're on "Intrepid Ibex" and the latest version is "Raring Ringtail".
It's even worse on Ubuntu, where they've chosen a reasonable, useful numerical versioning system (year.month), but then obscure it with stupid codenames.
IMO it's also much more difficult to remember the codenames. I had to verify that Android 4.2 was still called Jelly Bean and though I knew the latest Ubuntu was 13.04, I had to look up its codename altogether.
The fact that these projects continue to have underlying "developer use only"-type numerical versions only further emphasizes the utility of these. The codenames feel like a poorly-conceived marketing thing. I don't think most people have trouble remembering a coupled software package with a version number, like "Windows 7". I don't think they often say, "Oh crap, I know I had version 4 of something ... was it Android or Windows?"