Передавать действия пользователя, приведшие к данному результат. Обрабатывать их на бэке.
Если двоечник списал у отличника и выдал правильный результат, что у него спрашивают?
Зависит от задачи. К примеру, если надо вывести первые 3 файла и подсказку количества файлов, это можно сделать в рамках одной страницы. Если задача - подгружать полный список файлов с возможностью вывода содержимого подпапок - то надо смотреть в сторону ajax.
Почему вы клиентский скрипт называете бэкендом? =)
А по теме - чтобы скрыть бэкенд, напишите его на серверном ЯП, храните ключ там и общайтесь с ним по ajax.
document.write() очищает тело страницы и пишет html "с нуля", а вы хотите добавить html к уже существующему элементу. Почитайте про innerHTML, .appendChild(), .insertAdjacentHtml() и вообще про работу с DOM.
Я бы после проставления всех чекбоксов вызывал бы функцию, которая бы проверяла все legend input[type="checkbox"] и проставляла/снимала для .closest('legend') нужный класс.