Having the SkeletonAnimation disabled only means it won't Start, Update and LateUpdate by itself.
Using SetAttachment means it will change the weapon in the slot, but it will be overwritten in the event that any animation also sets the attachment in that slot.
If you are seeing the setup pose at any time, it might be because that slot was keyed from a previous animation but it was not keyed in the next one. The animation system assumes you want the animation (here, the next animation) to look as it does in Spine editor.
But if none of your animations ever key that slot, the Animation won't ever touch that slot either. So if you call SetAttachment for that slot, it will keep that attachment until your code tells it otherwise.
The way I see it, there are three ways to handle this.
a. Keep a reference to the slot, and the attachment that you want. Then set the attachment EVERY FRAME you want the attachment to be visible. You'll want to do this after the animations are applied (The UpdateComplete event on SkeletonAnimation) so you override whatever the animation has keyed or reset.
b. Never key that weapon slot ever in any of your animations. Then set the attachment on that slot through code yourself, only when it needs to switch. This is basically your current setup, except I think that your current animations do have a key on that slot. So you need to remove those if they are there.
or
c. Use your own instantiated Skin at runtime. Add a skin placeholder in Spine and animate with it. Then in your code, add the weapon to the skin when you want it to be visible, and remove it from the skin if you want it to not be visible. Then it will obey the visibility of the skin placeholder as long as you have the weapon in the skin defined.