Haskell as a language and GHC as an implementation both lack a mechanism for 'explicitly forbidding the construction of an instance'.
While I can accept an argument that Ratio Int and the like are 'a bad abstraction', they do exist in the language we have today, and the ability to store/load one of these things if you have one strikes me as a thing unrelated to its existence of a bad abstraction.
The badness of the abstraction, however, is not helped nor harmed by the existence of a Storable instance.
If you want to lobby to destroy the polymorphism of Ratio, and limit it to Rational, I'd be all for that. It is a much bigger and much more controversial debate, runs into standards issues, etc., but its one worth considering,.
That said, I don't think crippling the thing we have because you don't think it should exist is the right way to go about it, though.