How to make this run faster/more responsive?

I went through your code but did not read the whole thing carefully.

I think you are using a Graphical LCD and it is color graphical LCD. The problem is that so much data has to be sent to graphical LCD to get things working and on top of that you have to set the colors too. So every line of code you write for writing things on your LCD, the Arduino has to do so much work. It has to tell the color for each pixel and it also has to map the characters. So the LCD part of your code is very time consuming.

Considering that if you do not want to miss the button press and stuff like that you can scan them more often in your code. Rather than doing it once at the beginning, do it multiple time. In order to keep your code neat you can make a function and call it multiple times in the loop. However you should make sure after every scan you apply the correct condition so that you code does not get screwed. for example you do not want the screen to show half of the setting from previous condition and another half from the new selection. (although if your loop run fast enough you may get lucky and not experience any problem).

I am not sure about the graphical library you are using but I doubt it can become faster by few easy modification in the code. However there may be settings that can make it faster. Sometimes you can adjust the clock (i2c and SPI), baud rate (UART) to higher values to increase the speed. Overall that is the place where you should improve the speed. The code you have written yourself (non the libraries) should run very fast judging by what I understood in my glance through your code.