This means the compiler could infer that the lifetime of the output is the same as the lifetime of data2. I think this is correct in most cases, and where it's not correct you can add explicit lifetimes.
No, I do not think that adding such special-cased rules regarding arrays of primitive types is a good idea. The current rules for when lifetime elision is possible are very simple, and I think that adding weird special cases need to outweigh the costs of losing that simplicity.
Why would it be desirable for the compiler to do this?
IMO lifetime elision is already magical enough (even too magical, in some places). Adding more elision rules just means you have to hold more things in your head while you're reading it.
It's no longer unambiguous, because SomeStruct could contain a field of type &mut [u32]. If you make a rule that elision can still work if SomeStruct doesn't currently have a &mut [u32] field, then adding such field would be a surprising semver-break.