Arrays, handles and pointers are not that complicated.
What you need in this case are just handles, which are safer than just pointers as they are still valid after a game_load.
In your case you could let each actor perform a gun creation "routine".
Just let each actor create a weapon at the beginning of his action and save a handle to that weapon in any skill of the entity.
Later on when the actor moved or needs to perform something with his gun-entity you can just receive a pointer to it from the handle and influence it.
A code example, which uses C-Script and represents an actor who creates another entity and updates the position of it in each frame:
define gun_handle, skill22;
string gun_file = <gun_model.mdl>;
action actor_act()
{
you = ent_create(gun_file,my.x,null); // create the entity
you.passable = on; // make the gun passable
my.gun_handle = handle(you); // store a handle to it
while(me)
{
you = ptr_for_handle(my.gun_handle);
vec_set(you.x,my.x);
wait(1);
}
}