the reason for non-structed data was so that it would be easier to store parts of the info as bspx lumps. there's no reason you can't define some bspx extents lump to enforce that info, and it would be a shame to require repacking or extra conditions just because of that.
the other 3 sets of data may or may not be required when built into the bsp itself.
(for those that are unaware of it, bspx provides custom lumps, like 'RGBLIGHTING' to embed regular .lit files into the bsp (no header of course)).
to be honest, I'm not sure what we really want to promote, but .lit2 will be needed.
the other thing is that I wasn't sure if anyone wanted to add some flags to say that certain fields were omitted (so if nothing uses any non-0 style anyway, the styles part could be omitted entirely). I didn't suggest this myself in order to keep complexity down, but the option is there.
its also possible that a lit2 will have all shifts set to 4. this still provides deluxemaps, as well as making relighting flood random lightstyles without needing them to match the original bsp.
alternatively a flag to say the shifts should be floats instead of bitshifts or something. I dunno. floats suck, but it would allow even higher res lightmaps!... okay, bad idea, but hey.
the other thing is padding. Note that they're defined as ints, shorts, bytes, and thus need no padding (why do I get the feeling that someone is going to demand float scales instead of shifts, just because of this?).
(I really don't know what I want to do with bspx, but it would be a shame to ignore it completely - I dislike NEEDING external files, although I suppose it could just embed the entire lit2 data, optionally with all dsurface_t->lightoffset==-1 and invalid styles in a two-fingers to vanilla approach - the light data will typically be significantly larger anyway).
the other thing that might be nice is to include the info from .rtlight files somehow, instead of current methods.
but back on track, structs would be better for cpu cache than descrete arrays, yes, and might remove a few conditionals from the loader, even with the extra padding. However, I don't think it'll be that significant a saving compared to the potential size of the sample data.
it really all depends on whether anyone wants to make parts of it optional/selectable-precision or not.
See, this is why I like getting someone else to make the final decisions - its so much nicer being able to blame someone else for them all.

.