They're probably doing it to save space. It's not like Minecraft is not using enough RAM already.
4096 possible IDs (including air) is 12 bits, 16 possible metadatas is 4 bits. That means a block and its metadata can fit into 2 bytes.
That's not how it works. Their IDs are stored in an int, which in Java,
is 32 bits (or 4 bytes) no matter what. Metadata is a different matter (not to mention a different data field) entirely. Unless you work your arse off with bitwise operators, you can't even manipulate data that's less than 8 bits in size; even a boolean (which is either true or false) is always, at minimum, 8 bits.
When IDs have a fixed limit (technically, they're all limited, but I'm speaking of a limit below MAX_INT), that typically means that what they're doing is creating an array of blocks (or items) of a fixed size.
That is bad design. One, its inflexible: if you want to resize arrays in most languages (raw arrays, not wrapped arrays like ArrayLists in Java or vectors in C++), you'd have to create a new array of the desired size and copy over the original array, something that is extremely cumbersome, and is thus almost never used as most people who want or need such functionality will go for the standard array wrapper classes available to them. Two, its inefficient: if you have less than the maximum number of blocks and/or items allocated, you're wasting space, since every member of the array exists in-memory as a blank instance of the appropriate type. Granted, two is somewhat mitigated because blank instances don't have as much data as regular instances, but that's still wasted space.
And, seeing how Mojang waited until the game had been around (and popular) for several years
before releasing a critically needed overhaul on their
obscenely badly-designed engine, do you
honestly expect them to take the efficient, sensible option first, when a sloppy kludge is available that gets the job done faster? Ya don't need a degree to know some design decisions are just...bad. Minecraft may have started out as an indie project by a lone dude (and maybe his friends, I dunno when Jeb and Co. joined in, exactly), but once it started showing signs of being popular, Notch really ought to have taken the time to refactor the code and make it not only make it more efficient and more stable, but also make it more easily-extensible to speed along future content additions.
One of the first rules of programming I learned a long time ago: raw arrays are bad. Avoid them like the plague whenever possible.