Objects ignore a lot of commands if the object is not local to the machine running the command. In mission-placed triggers, the code will be run on every machine, so you are therefore guaranteed to run it on the local machine and so never need to worry about locality. When you are dealing with client-side scripts, such as those run from actions or via onMapSingleClick, they are only run locally, so you have to manually communicate with the other machines if you are using "local-only" commands.
(Code is untested)
"destroyObjects" addPublicVariableEventHandler
{
_objects = _this select 1;
{_x setdammage 1} forEach _objects;
};
...
_obj = nearestObjects [_pos,["ALL"],70];
// Destroy any objects that are local to the client machine.
{_x setdammage 1} forEach _obj;
// Ask all other machines to destroy objects that are local to them.
destroyObjects = _obj;
publicVariable "destroyObjects";
....
This would then work fine on SP, MP hosted or MP dedicated. Please note, however, that by searching for "ALL", you will also be deleting game logics, which could cause compatibility problems, and mission-placed buildings. I'd suggest using "AllVehicles" instead, which will catch men and land/sea/air vehicles.
EDIT: Although it doesn't describe publicVariable events, since it was written before they were introduced, our
MP tutorial explains a number of locality issues.