Staying in a subroutine

Either write setupmode() so that it works correctly while repeatedly called (this is possible, but I am not sure if you have the skills as you are asking the question)

OR

Put this inside setupmode();

while(digitalRead(setuppin) == HIGH) {
// Setup mode code
}

However, if you do the second of my suggestions you will find you have actually done most of what you need for the first.