Some basic suggestions:
1 - _target=_this select 0, make first parameter a position instead of an object, this way markers might be used too.
2 - You might pass as argument an array of vehicles or a single one that would "act" as artillery. So if the vehicle or vehicles passed are destroyed, there will be no artillery support.
3 - _explosion= _ammo createvehicle [(_x_target+_x_gap), (_y_target+_y_gap), -0.1]. Create the ammo higher, for example at 100m, so the observers might see the projectiles falling down.
4 - _explosion setdammage 1. ArmA ammunitions cannot be damaged, they explode upon contact with terrain or another object. There is an static object named "Bomb" that will detonate when damaged, but this is the only exception and it is not an ammo, but a special static object.