Обычно да, обмазывают эвентами. Данные изменились и сообщили об этом всем подписчикам. Но можно использовать библиотеки реактивности, например, MobX, тогда всё будет проще и удобнее.
И shift, и splice будут реально смещать все элементы. Нет, массив не реализован как список. delete тоже неоптимальный вариант. А вот вышеупомянутый (в комментариях к вопросу) кольцевой буфер на массиве длиной N - идеально для твоего кейса.
boundedBy - "область на карте, где предположительно находится искомый объект". Это приоритеты, а не ограничения для поиска. Похоже, придется запилить свою реализацию ISuggestProvider, где вручную поюзать geocode, в котором boundedBy отработает как надо вместе с опцией strictBounds=true. Эту реализацию запихнуть в options.provider для SuggestView
Первый очень плох из-за того, что api прибивается гвоздями к какому-то modal, хотя должно заниматься только общением с сервером, в общем, полнейший бардак и никакого разделения на слои. Третий не удобен, потому что в таком виде в случае ошибки response будет равен значению, возвращаемому функцией modal, это надо проверять отдельно и всё равно выходить. Во втором всё как положено - либо работаем с респонсом, либо вываливаемся в catch
Если я правильно понял, fetch возвращает некий хтмл, который потом втыкается в someElement.innerHTML? Тогда все имеющиеся в этом хтмл теги < script > просто добавятся, но не отработают. Надо найти их как someElement.querySelectorAll('script') и каждый "передобавить" вручную, тогда код в них отработает.