Нормального решения нет. Но вы можете сделать ненормальное. Заведите в товарах дополнительные поля инфоблока для хранения цен для разных городов - примерно как сейчас в демо-магазине поля для минимальной и максимальной цены SKU. Эти поля могут формироваться при создании/изменении товара из базовой цены по заданному алгоритму для разных городов. На сайте вы показываете не базовую цену, а цену из поля, соответствующего городу покупателя. Но в этом случае вам необходимо будет изменить обработчик добавления товара в корзину - он должен либо брать цену из поля, либо пересчитывать для города покупателя цену из базовой по заданному алгоритму и добавлять товары в корзину по соответствующей цене. Для реализации такого варианта вам потребуется небольшая корректировка всех шаблонов компонентов, работающих на сайте для отображения цен и товаров.