I've pondered this for a long time, but I've never heard an explanation.
I'm guessing that either MySQL's C API is simply not constructed to hand over data in its original type (which sounds like a design flaw), or the original mysql driver (replaced by the mysqli driver) was simply poorly designed and the mysqli driver was trying to be backwards compatible.
I understand PostgreSQL casts types in PHP, for the most part.. why doesn't MySQL? Is it a common practice in other languages and RDBMSes to return all values as a string?