I guess ATC decided something around 4,000 distinct codes would be sufficient, so 4,096 is stored most efficiently in 12 bits of data. If you went 0-9, you could have 10,000 codes, but that's really more than they needed and it would take 14 bits of storage and even then you're wasting space.