Sure, you can manually maintain your own parallel data to the sprite system. However building custom (user defined) data into the sprites, just takes away the need to man handle the data.
In the current tech, this ideas is used to simplify resolving collisions between sprites. Currently to resolve collisions, we normally end up comparing our various entities together. These entities are probably stored within various type array/lists. With this approach, the program drives the whole process. If you add different lists of entities, you have to manually wedge in code.
However by storing the user data within the sprite ( hits / score / parent array indexes / pointers), you effectively turn the problem around. No longer do we need to explicitly compare list to list. It can all be resolved from the sprite commands/data without every knowing what parent array a sprite was associated with..