Les remise n'ont pas de lien direct avec un coupon. Tu peux utiliser la méthode setDiscount() de la classe Model\Order pour ajouter une remise (en TTC) à la commande.
A la réflexion, je me rappelle que tu peux aussi ajouter une remise en Euros TTC sur le Cart (méthode Cart::setDiscount()), qui sera automatiquement reportée sur l'Order au moment de la création de la commande.
Du coup, tu peux mettre à jour ta "remise" dans le Cart avec un event listener qui écoute les events du cart (CART_ADDITEM, CART_DELETEITEM CART_UPDATEITEM, CART_DUPLICATE) avec une priorité plus basse que 128 (celle du core de Thelia) et recalcule la "remise" à chaque modification du cart. Çe me semble être une bonne méthode.
Si tu modifie un module de paiement, tes modifs seront bien sûr écrasées à la prochaine mise à jour du module. Tu peux par contre créer un module de paiement qui extends un autre module de paiement, et surcharge la méthode qui utilise le total de la commande.