In your first example, new Skin() means creating a new empty skin. The name you give it doesn't matter.
When you use it as the skeleton's skin, it will be empty, as expected, because it's a new empty skin.
In your second example, SetSkin is asking the skeleton to look for "armor-L-2" in its skeleton data and use it.
If it finds it, it will use it. And if it has attachments, they will be used. When you call SetSlotsToSetupPose, it will use the attachments defined in the skin to return the slot attachments to setup pose.
In your third example, FindSkin is asking the skeleton to look for "armor-L-2" in its skeleton data.
AddAttachments is telling it to add attachment to that skin from a different skin.
"armor-L-2" is from your shared skeleton data, any other instances of this skeleton using "armor-L-2" will also get the attachments from "eyes-1".
I think what you want is
Skin newSkin = new Skin("some special custom skin");
Skin armor = data.FindSkin("armor-L-2");
Skin eyes = data.FindSkin("eyes-1");
newSkin.AddAttachments(armor);
newSkin.AddAttachments(eyes);
_skel.skeleton.SetSkin(newSkin);
_skel.skeleton.SetSlotsToSetupPose();