Only one child light source for parent objects created multiple times
This solution, is called a FX lamp lending library. 

Add a bunch of FX lamps like lamp1, lamp2, lamp3 etc, 

Parent them to a object, name it LampFX, set each lamp energy to zero

Add a property in each lamp "Lamp" 

Have the LampFX object run this (one time)

#build lamp list
import bge
cont = bge.logic.getCurrentController()
own = cont.owner 

if "LampList" not in own:
    Lamps =[ ] 
    index=0
    for child in own.children:
        if "Lamp" in child:
            Lamps.append([child, False])
            child['index'] =index 
            index+=1

    own["LampList"] =Lamps


When a projectile is added to scene, use

added = own.scene.addObject("projectile", own, 0)
for Lamp in own.scene.objects["LampFX"]["LampList"]:
     if Lamp[1]==False:

         Lamp[0].worldPosition = added.worldPosition
         Lamp[0].setParent(added,0,1)
         Lamp[1] = True
         Lamp[0].energy = 1.0
         break


Now the lamp is "checked out" 

Now, before the projectile is deleted, a script needs to put it back and check it back in, so another projectile can chexk it out again. 

for child in projectile.children:
    if "Lamp" in child:
        own.scene.objects["LampFX"]["LampList"][child[index]][1] = False
        child.removeParent()
        child.energy =0.0

own.endObject()