This is a larger topic I have been struggling with as well. I am an experienced programmer and yet still having trouble wrapping my head around it because I want to keep things properly divided between programming in C++ and designing in blueprint. In other words, how do I allow for easy level design on the part of my team mates. I have a similar setup to the OP where I have items that are created and converted and destroyed in the world. I have made a class that represents an Item, and the intention was that a designer can then make a blueprint class based off that BaseItem class, and then using BP define the properties of a specific item. Repeat for all the items. The for example there are other classes where I wanted to store multiple items, and the intention was that a designer could just drag and drop the BP Items they made to slot them into this class, but that doesn’t seem to be working. They can’t be slotted in.
The idea of storing the data in simple structs is clean and efficient, but then how is a designer supposed to do their job?