If an MCU doesn't have a separate EEPROM area to save data in, then yes, you can save persistent data to an area of the flash memory not used by program code. This is only good for data that is updated infrequently (such as configuration data or user preferences), since there is a limit to the number of times you can rewrite the flash (typically a minimum of 10,000 erase/write cycles). The advantage to saving data in this way is that it won't be lost when the MCU loses power. Without some sort of non-volatile storage, you would need to have a battery-backed up RAM to save data during power shutdown.
The second reason for allowing a program to write to the flash, is that it allows programs to be updated remotely in the field. To do this, you need a portion of the program to be resident all of the time (the part that will write the new code to the updateable portion of the flash memory), and a means to download the updated code (e.g. Bluetooth, cellular, etc.). You want to make sure the always-resident portion of the code is as bug-free as possible, since it is harder to update that.