Because of the color of the spray can and it's projectiles, 1 color = 4 datablocks or something like that.
To add full RGBA coloring you'd need to modify the engine regardless, in which case you could just implement dynamic recoloring for images and projectiles, which would make the datablock count constant rather than linear.