Obviously there are no restrictions if you’re working in C++. Are you talking entirely blueprints? Or you need it exposed to some degree to blueprints?
Edit: Okay so just realised this is in the C++ forum. So why do you say structs are meant to be passed by value? If you want to just hold a pointer, then hold a pointer. Alternatively, you could use some kind of ID to reference entries in your centralized array. That way you could also expose blueprint access if needed.