What is your use case for using skins?
To have characters wearing different items, just use images on a slot. Use skins when you want to reuse a skeleton with animations that change what images are visible during the animation. These image changes in the animation can hide and show a skin attachment instead of an image. The actual image that is hidden and shown comes from a skin, allowing the animation to be reused.
The goblins example shows this, note that the walk animation changes the eyes image so it blinks. If a skin was not used, the keyed image change would have to be either the goblin OR goblingirl eyes. This would mean your animation can't be reused
you'd need two animations, one for goblin and one for goblingirl.
Skins are not meant to be used to change what weapon is in the characters hand or what hat/gloves/armor/etc she has on. For these, just use slots with regular images. You will have to manage setting which images are visible on which slots in your game code. Skins are for when you have multiple characters that use the same skeleton and you want to reuse all the animations.
You can generate a skin programmatically if you need to fill in a skin attachment. Eg, you might have an animation where the skeleton's weapon breaks, so it keys an image change for the weapon. You'd need to change the skeleton's skin so it has the appropriate attachments for whatever image you want the skeleton to carry. Note this is better than having to copy a whole animation to change which image is keyed based on the weapon the skeleton is carrying. An animation is a lot more data than a skin.
Spine lets you define attachments but your game will still need to know about them: their names and when to equip them to setup a skeleton like you want. You can use skins for this, but it really isn't intended for you to create a skin for every mix and match of attachments. This might make sense if you have only a small number of variations.
That said, 50 skins per skeleton is not much, they are very a lightweight. Each entry is just a string name and a reference to an attachment.
If you have a huge number of attachments with more images than you want to load into memory, you can provide an AttachmentLoader and return a RegionAttachment that knows how to do deferred loading. All the attachments are loaded, but this won't take much space if you defer loading the images. So you'd configure your skeletons with skins/attachments, then go through all their attachments and load the images for only those you are using.