How to change variables or strings using buttons?

I have made an alarm device with arduino MEGA. User may change the limits of a temperature value on hot or cold days using buttons. Value is stored on EEPROM, even after restart it will has its last setup value. My problem is that EEPROM has many limitations.

Is there any better way to change variables and strings?

Save to EEPROM:

 void save_to_eeprom(unsigned int address, float config) { // (address, value)
      for (byte i = 0; i < sizeof(config); i++) { // size of config is 4
        EEPROM.write(address + i, reinterpret_cast<byte*>(&config)[i]);
      }

Read from EEPROM:

 float read_from_eeprom(unsigned int address) { //(address)
      float config;
      for (byte i = 0; i < sizeof(config); i++) { // size of config is 4
        reinterpret_cast<byte*>(&config)[i] = EEPROM.read(address + i);
      }
      return config;
    }

This is how templimit will keep its last value after restart, the full code is:

 #include <EEPROM.h>
 
    // this constant won't change:
    const int  buttonPin = 8;    // up
    const int  buttonPin1 = 3;    // down
    const int  buttonPin2 = 2;    // enter
    
    // Variables will change:
    int buttonPushCounter;   // counter for the number of button presses
    int buttonState;;  // up
    int buttonState1;;  // down
    int buttonState2;;  // enter
    int templimit = read_from_eeprom(20); // temperature limit for alarm
    
    void setup() {
      Serial.begin(9600);
      Serial.println("Update temperature limit if not wait 10 sec for time out");
      updatevalue();
      Serial.println("Done");
      Serial.println(templimit); // temperature limit for alarm
    }
    
    void loop() {
      // do nothing
    }
   
    int updatevalue(void) {
      int timenow;
      int timepassed;
      int counter = 10;
    
      timenow = millis();
      while (buttonState == LOW and buttonState1 == LOW and buttonState2 == LOW) { // this loop is just for 10 sec time out
        buttonState2 = digitalRead(buttonPin2); // enter
        buttonState = digitalRead(buttonPin); //up
        buttonState1 = digitalRead(buttonPin1); // down
        timepassed = (millis() - timenow);
        delay(1000);
        Serial.println(counter--);
        if (timepassed >= 10000)
          return 0;
      }
      while (buttonState2 != HIGH) { // do this until enter is pressed
    
        buttonState2 = digitalRead(buttonPin2); // enter
        buttonState = digitalRead(buttonPin); //up
        buttonState1 = digitalRead(buttonPin1); // down
    
        if (buttonState == HIGH) { // up
          buttonPushCounter++;
          Serial.print("number of button pushes:  ");
          Serial.println(buttonPushCounter);
        }
        if (buttonState1 == HIGH) { // down
          buttonPushCounter-- ;
          Serial.print("number of button pushes:  ");
          Serial.println(buttonPushCounter);
        }
        delay(700);
      }
    
      save_to_eeprom(20, buttonPushCounter); // save to address 20 tha value it can be negative
    
    }

My problem is that EEPROM has many limitations.

Would you care to elaborate ?

EEPROM can only hold value from 0 to 255 and has life time on read/write.

EEPROM can only hold value from 0 to 255

Not true