Да вроде в языках программирования всё давно придумали. Идентификаторы с областями видимости. Вложенные идентификаторы "затеняют" внешние. Т.е. вопрос лишь в том, как грамотно спроектировать эти области видимости. Самый очевидный вариант это использовать специальный элемент, не влияющий на визуальное отображение. Ну или использовать атрибут у существующего элемента.
<div id="name">Name:</div>
<div scope>
<label for="name">Last name</label>
<input id="name">
</div>
<div scope>
<label for="name">First name</label>
<input id="name">
</div>
<a href="#name">Back<a>