Why is my Super Table field returning the ID for existing blocks?
I think the key thing here is that its a static Super Table field, which is treated differently to a repeatable one. Instead of looping through each block, there's only one. Fortunately, you have all the required information, as this is in fact the blocktype variable.    

{% set fieldHandle = 'mySuperTableField' %}
{% set field = craft.fields.getFieldByHandle(fieldHandle) %}
{% set blocktype = craft.superTable.getSuperTableBlocks(field.id)[0] %}

&lt;form method="post" accept-charset="UTF-8"&gt;
    {{ getCsrfInput() }}
    &lt;input type="hidden" name="action" value="users/saveUser"&gt;
    &lt;input type="hidden" name="userId" value="{{ currentUser.id }}"&gt;

    {# Start with the top-level Super Table field #}
    &lt;input type="hidden" name="fields[{{ fieldHandle }}]" value=""&gt;

    {# Ensure any existing rows in your Super Table field are saved #}
    &lt;input type="hidden" name="fields[{{ fieldHandle }}][{{ blocktype }}][type]" value="{{ blocktype }}"&gt;
    &lt;input type="hidden" name="fields[{{ fieldHandle }}][{{ blocktype }}][enabled]" value="1"&gt;

    &lt;input type="text" name="fields[{{ fieldHandle }}][{{ blocktype }}][fields][customField1]" value="Value 1"&gt;
    &lt;input type="text" name="fields[{{ fieldHandle }}][{{ blocktype }}][fields][customField2]" value="Value 2"&gt;
    &lt;input type="text" name="fields[{{ fieldHandle }}][{{ blocktype }}][fields][customField3]" value="Value 3"&gt;

    &lt;input type="submit"&gt;
&lt;/form&gt;