Так делать не надо. Во-первых, на уровне разметки и CSS мы обратную совместимость не гарантируем, во-вторых, метка может быть отрисована на canvas-е и своего DOM не иметь.
Не знаю, что вы называете «хинтом» (вообще-то это всплывающая подсказка), по-видимому, вид самой метки.
Пресет меняется так же, как и любые другие опции.
Кластеризатор — плоская структура, не имеющая вложенных коллекций.
Этот пример придётся существенно переработать, а именно — добавить в properties признак типа «id группы», показывать метки через ObjectManager, а фильтрацию по коллекциям делать через метод setFilter.
Использование API Карт (что Яндекс, что Гугл) запрещено в закрытых и/или коммерческих системах. Переживать, что вычислят, стоит.
Лучше использовать OpenStreetMap.
Бесплатно рассчитывать неограниченное количество маршрутов не даёт никто (у Яндекса ограничение 25К/сутки). Можно поднять свой сервер OSM, но сервера нынче тоже не бесплатные.
Единственное, что могу предложить — считать расстояния по прямой, а не по дорогам.
Вообще так делать не надо. Ваше решение плохо тем, что оно не кэшируется, т.е. сдвиг карты на 1 пиксель приведёт к перезапросу всех данных habrahabr.ru/company/yandex/blog/243665