A few ways. The compiler could enforce commutativity, associativity and other properties of those operators.
Another possible route is to require that all types contained within the exported types are also numerical, or have some specific set of operators defined.
It's undecidable if the language used to define operators is sufficiently expressive. Even simple syntactic constraints would work well enough for most scenarios, like "operators may only be defined by an expression containing other operators".
New types also don't have to inherit the properties of the operators they use.
In any case, my point was that there are multiple avenues to explore in providing operators in a way that don't compromise the compiler's ability to optimize numerical code.
Another possible route is to require that all types contained within the exported types are also numerical, or have some specific set of operators defined.