I suspect that it happens because of the asymmetrical power relationships between the customer and supplier. The suppliers are typically too small to have the option to sue. Perhaps the solution is to make this kind of breach of contract a strict liability criminal offence!
A better solution is to negotiate the late payment penalty in the contract itself, then just add the late payment penalty as a line item on future invoices.
Don’t put it on the invoice of payment is close to on time, and waive the first late payment (if the other payments are close to on time). When waiving it, put the late payment fee in the invoice and and another line item waiving it. In whatever communication channel you send the invoice, note that they had a late payment, and that since it’s the first time you’ve waived it.