Ну так я ж направление дал, а не решение.
Вешайте вызов на аякс. Всё будет работать. Проблема лишь в том, что index.php?route=product/compare&remove={product_id} возвращает html, а не json, например, и сложно "распарсить" ответ чтобы понять результат удаления из сравнения.
В реальности же удаление и добавление в сравнение - это удаление и добавление ID товара в $this->session->data['compare']
Т.е. Вам нужно создать контроллер, в котором будете ловить Ваш ajax вызов и по product_id, переданном в нём, проверять массив $this->session->data['compare'].
При успешном нахождении в нём удаляемого товара делать unset. Как-то так:
if (in_array($product_id, $this->session->data['compare'])) {
$key = array_search($product_id, $this->session->data['compare']);
unset($this->session->data['compare'][$key]);
}
Ну и вернуть скрипту уже json, чтобы в вызове можно было по результату ответа либо снимать переключатель, либо оставлять как есть и выводить "предупреждение" какое-то...