Ответ прост:
const => ReadOnly на переменную.
let => ReadWrite на переменную.
Причины для защиты переменной от изменения могут быть абсолютно любыми.
1. Как наиболее частое употребление защиты: многократное использование значения константной переменной в разных блоках кода.
2. Иногда, используют как хранилище, используя объект внутри константы.
Важно помнить: объект внутри константы МОЖНО изменять, но нельзя менять ссылку на него (значение самой константы).
Ну и отрывок из доки:
const создаёт константу (новую именованную ссылку на область памяти), доступную только для чтения. Это не означает, что указываемое значение неизменно, но это означает, что идентификатор не может быть переназначен. Например, если константа указывает на объект, то сам объект может быть изменён.