STM32 STUtility read out protection
I think you're confusing the different types of protection. The Read Out Protection is really the key thing for protecting your code from being accessed by an end user. It basically locks down access to the code from the boot loader, RAM boots and system boots. This means it is not possible to use the boot loader to read the FLASH, or feed a malicious program into the CPU that can scan the flash array. 

However, none of these settings affect the operation of the FLASH when booting into your code normally. This is handled by the write protect bits associated with each sector in the FLASH. The point of these is to allow you to prohibit writes to sectors that contain your static code. A good example of where this is useful is in your application. You can write protect all sectors but those used by your virtual EEPROM. This will means that if your virtual EEPROM code goes crazy and tries to write to a random sector, the program will not be corrupted.

So to protect your program, you want to select the appropriate level of ROP (probably the highest) and then set write protection on all sectors except for your EEPROM code.