How can additional custom fields be added to the Sites settings?
I would say the easiest thing is to create a set of Globals with all site specific settings. You can include custom settings for sites via Behaviors and Events and include your custom HTML and run custom logic to store those values in custom tables but I doubt it's worth it. A global set should be fine.

By the way: GlobalSets are site specific - you don't need to include a site handle or something. Just insert different settings for each site, Craft will fetch the correct one by itself.

If you want to loop a set for all sites

{% for site in craft.app.getSites().getAllSites() %}
    {% set globalSet = craft.app.globals.getSetByHandle('myset', site.id) %}
    {{ globalSet.myValue }}
{% endfor %}