Is there any practical relevance of such violations to functional programming?
I think you've made a pretty clear case that the answer is 'yes'.
If not, should we simply assume referential transparency?
The only way I can see this being OK is if the only thinkthing you care about is whether the results are approximately the same. But this has major pitfalls since small inconsistencies can become much bigger when multiplication and division are involved.
Or should we strive for maximal RT, eg, by choosing a language with better reproducibility of numerical results at the expense of their precision?
I don't think you need to reduce precision. What would eliminate these issues is to use a type that avoids using binary fractions to attempt to do math with numbers in another base (and/or doesn't have all the historical weirdness of floating-point.) A type with infinite decimal precision would work as would a type with fixed decimal precision. If you want it to occupy the same space as the floating-point types, you might have to sacrifice some precision.