How to relate a long survey to a user and later query by values
When you're dealing with that many fields it's definitely a non-trivial undertaking but Craft does have all the tools you need to pull it off.

Your plan B is probably the most solid option. Make a new section that houses the skill entries and then set up all the radio buttons on it you'll need.

You can put fields on Users directly but it gets weird as they don't act like entries in some respects.

Getting all the fields into Craft is probably another topic that you'll probably want to do programatically.  However,  after you have them all in the CMS, it's relatively straightforward to spit out all the fields for a particular entry type in a section. 

To do that: 

{# get the section by handle #}
{% set section = craft.sections.getSectionByHandle('skillRecords') %}

{# fields are set on entry types of sections to get all the entry types #}
{% set entryType = section.getEntryTypes %}

{# loop through the fields in the first entryType's fieldLayout Model #}
{# if you have more than one entry type, use 1, 2..etc #}

{% for fieldLayoutField in entryType[0].getFieldLayout().getFields() %}

    {# get the field from the id #}
    {% set field = craft.fields.getFieldById(fieldLayoutField.id) %}

    {# grab the type of field from its className #}
    {% set fieldType = field.className|replace({'craft\\fields\\':''}) %}

    {# output the field #}

    {% switch fieldType %}

     {% case 'RadioButtons' %}
     &lt;fieldset&gt;
     &lt;legend&gt;{{ field.name }}&lt;/legend&gt;

    {% for option in field.options %}

        {% set selected = entry is defined ? 
                          field.value == option.value : option.default %}

        &lt;label&gt;
            &lt;input type="radio"
                name="fields[field.handle]" value="{{ option.value }}"
                {% if selected %}checked{% endif %}&gt;
            {{ option.label }}
        &lt;/label&gt;&lt;br&gt;

       {# you'll probably  want to make other cases depending on what you're doing #}
    {% endfor %}
    &lt;/fieldset&gt;

  {%endswitch%}

{% endfor %}


That's a pretty simple example with zero styling so you'll obviously want to make it your own. As with anything in Craft, the front end and the UI is up to you.

You might consider splitting up the questions into pages (eg 30 per page) and save the form after every page (either in the user's browser or to Craft itself). Vue or even jQuery can help you do that.

I'm not sure what the performance aspect is going to be when it comes to 120 fields. The most performant way would be to setup your own table with its own values but that goes down the rabbit hole of plugin development.