You can edit anything you want with a hex editor. There are ways to "hide" entire files but as soon as you can make them visible and open with a hex editor, then there are no ways to make parts of a file invisible. (1)
However ... You need to work within the frame of what you are changing. Suppose you edit a simple BMP image, and you "change" its size from 1x1 to 2x2. Will that "work"? No -- you are changing an important property (the image size) but not the actual image, and no program can read your modified BMP image anymore, since it expects a 2x2 image now.
However, if you only change the color of the one pixel inside the image, then there is no problem. BMP files do not contain a checksum, and so your altered file will be read correctly.
The same goes for your "Sonic" example. Yes, you can modify single instructions -- but (within the constraints of the entire executable) you cannot 'insert' or 'delete' them. And before you can change a single instruction, you need to be absolutely sure it is a single instruction, and not part of a previous multi-byte one. This might be hard to see if you are looking at a raw hex dump.
A third problem may be that the file is encrypted or otherwise protected against tampering (e.g., with aforementioned checksum). If that is the case, you can look all you want, but you cannot find anything useful to change; or, changing the data may make the program stop running (i.e., if it detects the original has been modified).
(1) Back in the days of floppy disks and CD-ROMs there were ways to invalidate disk sectors. That way, a 'file' could not be copied to another medium or opened with regular disk editors. Of course, the reading application "knew" which sectors were damaged and did not try to access them.