I agree, I find it awkward when a programming language (like Java and JS) provide operators for their built in types, but if you want to use different types (say, complex numbers, numbers with different precision, ...) you have to use much less readable functions instead.
About the argument that operator overloading can be abused for unreadable code: so can functions, naming, or anything else.
About the argument that operator overloading can be abused for unreadable code: so can functions, naming, or anything else.