what :: Typeable a => a -> a
Here `what` is no longer guaranteed to be `id`. Instead, we can translate it like this what :: (a -> TypeRep) -> a -> a
where `TypeRep` is, as it sounds, a representation of the type of a returned dynamically. This means that we can do careful coercions to, say, be `id` unless `a` is `Int` in which case we add `1`.Suffice to say that the degree of guarantee breaking that this kind of code invites makes Typeable a very specialized library that's almost never recommended without a "unless you really know what you're doing" kind of warning.
I'm not sure why you bring this up - nearly every language that enables reflection lets you do this, including Haskell[0].
No decidable static type system can ensure correct semantics for all use cases, including even badly written code[1].
[0] And you don't even need reflection to do this, per se; it just makes it more convenient.
[1] One could design a static type system that did, but it would be undecidable.
You can always get around things, but languages that make a strong commitment to keeping reasoning as a priority are qualitatively different from those that do not.
[1]: http://how-bazaar.blogspot.co.nz/2013/07/stunned-by-go.html