So, if you find a readable string you can read it, or you can change it with the hex editor. You can open any file in a Hex Editor and the Hex Editor will show the ASCII character for any values that can be converted to text (including values that don't represent text). In other words, the hex code is meaningless unless you know what the machine language is. C/C++ is portable (with some limitations) so you can compile a C/C++ program to run on an Arduino, PC, or Mac, but the machine language hex code only runs on the machine it's intended for.
(Or, they steal the source code or simply copy the hex code.)
Realistically, when people do 'reverse engineering', they usually figure-out what the code is doing and they start-over and write a new program that does he same thing.