Why is my program stored in flash memory instead of EEPROM in ATmega328?
EEPROM is normally used to save data between power downs/ups or for backup (in case power goes down).

So if you save some data (e.g. acquired by your sketch) to EEPROM, and the Arduino is powered on again (or not, that does not matter), the data is still in EEPROM and your sketch can continue with the data without losing anything.

And it's a good thing that EEPROM can be written more often than Flash, because once your sketch is finished and you build it in your 'product', you don't need to change it anymore. Only during development you will write to Flash. Maybe it happens a lot, but I doubt you do that many thousands of times (if you do, you need to change your workflow).

But the data on EEPROM might be written daily, hourly or even more (depending on the requirements).