storing these three type of data
You don't. The information you store should be rarely changing. The actuator state should be determined by sensor reading for current state, not assuming that whatever in memory is accurately after whatever issues.
You mention ESP-IDF, the built in NVS library, and in micropython too, has wear leveling built in.
What you're asking for:
Improved Design:
Don't bother storing these things at all.
Then all your controllers are programmed the same, centrally managed, easy to backup, easy to replace, no wear leveling to bother with, no local user input or ui to bother with.