I think any such instance would have to enforce the invariants of the type and load via (%), which does mean it'd need the Integral constraint.
Loading and storing with Storable can already change some of the bits in all sorts of types.
Nothing says that every bit configuration with a given size is a legal inhabitant of the type we store. Consider Storable Float and Storable Double: We silently change between quiet and signaling NaNs.
We've actually run into this in the wild at work, because a naive test we wrote was to round trip Ermine code by loading and serializing it and comparing the result bitwise, but loading and storing Floats/Doubles changed them.
Similarly if you had a padded struct nothing says we'd peek the bits in the gaps between fields.
So Storable (Ratio a) changing some bits if you round trip in and out isn't unusual at all and in that light, I'm generally in favor of having it for completeness.
That said I'd also support a longer term and much broader discussion about if we want Ratio a to exist at all.
It doesn't support any of the usecases one would classically want out of a ring of fractions, and basically exists solely as a dangerous representation that blows up easily, and as a source of pain for users.
-Edward