Thanks for the tips, although I did know those. Instancing/array is just one functionality. What if I'd like to throw on a lattice to tweak one instance to fit somewhere better? What if I'd like to use the curve modifier?
The point is, the fact that you can do instancing through the workarounds means that there isn't a technical barrier to doing any of this. You say that it would introduce footguns to the UX, but I consider the workarounds to be footguns.
But there is a technical barrier, which stems from what the 'instancing' actually is on the technical level; uploading only one copy of the geometry to the GPU, and rendering it in multiple places, which you can't do if you want to use separate modifier stack for different copies (since modifiers are done on CPU beforehand). The instancing features are ways to set just that kind of instancing up, and as such fundamentally incompatible with separate modifiers between instances of the same geometry.
But yes, I do see the use case for collection level modifier stacks, I just don't think implementing those is exactly as trivial as you figure it out to be. Not impossible either of course (for example by doing some sort of copy-on-write thing if the geometry is modified), but it'd be introducting a different kind of copying mechanism with significant performance differences, which smells a bit footgunny to me
The point is, the fact that you can do instancing through the workarounds means that there isn't a technical barrier to doing any of this. You say that it would introduce footguns to the UX, but I consider the workarounds to be footguns.