new_skill_tab.connect("pressed", _on_skill_tab_pressed)
yep, you can't connect signal to the same pair(object, method) twice. Doesn't make any sense anyway (what do you think should happen)
new_skill_tab.connect("pressed", _on_skill_tab_pressed(skills.skill_name))
This just calls the function _on_skill_tab_pressed. Really, should be obvious it won't work.
What you want is to use Callable.bind:
new_skill_tab.connect("pressed", _on_skill_tab_pressed.bind(skills.skill_name))
This will create a new Callable which binds (remembers) the skill_name and passes it to the on_skill_tab_pressed method when called. If you ever want to disconnect the signal though, you should save this new callable somewhere, because you will need it for disconnect method.