I would suggest using state machines. If you use state machines to control the code for the character, then you can have a state for using the weapon that is separate from the non-weapon state.
For the visibility of the weapons, I would recommend just making the weapons invisible when you do not need them. That way you don't need to worry about instancing and destroying the nodes.
Depending on how you write the state machine, you could have transition functions (like state_start and state_end for example) that handle making the weapon visible and invisible.
If you want to instance the weapons instead of making them visible and invisible, I would still recommend looking into state machines, as you can use the transition functions in each state to instance and delete nodes/weapons as required.
This YouTube video from GameEndeavor covers how to make a state machine in Godot. I haven't fully watched the video, but from what I have seen of the code it is very similar to how I write state machines.
If I was creating a weapon system like in Hyper Light Drifer, I would probably initially try using a state machine, just because it would help take care of a lot of the complexities that might arise.
(Side note: Welcome to the forums!)