Если нужно просто получить данные (и разметку) от сервера и вставить их в открытую страницу, возможно получить код элементов страницы modal.html (чистый body, без header и прочего) используя xmlHTTPRequest2 и вставить результат в нужное место страницы через
document.querySelector('селектор_контейнера_для_вставки_modal_html').append(результат_выполнения_запроса_xmlHTTPRequest2)
Если требуется подключать также и скрипты из modal.html в реальном времени - решение получается более сложное. Необходимо получать список подгружаемых js-модулей от сервера, динамически менять header основной страницы и следить за моментом окончания подгрузки новых скриптов.
Кошерный путь - использование модулей (см. ключевые слова import и export) ES-2015 или CommonJS из Node.JS, но и в этом случае всё далеко не так просто, как "подключить modal.html в index.html".
На всякий случай упомяну <iframe>, мало ли...