Se usaste un approccio basato su una macchina a stati (qui una piccola introduzione in inglese Yet another Finite State Machine introduction) non saresti costretto a restare bloccato nella funzione, il loop continuerebbe a girare e un evento di timeout farebbe uscire dalla modalità di inserimento della password.
Se invece resti con il tuo approccio, la tua funzione potrebbe restituire un valore booleano che indica se la password è stata inserita (return true;) oppure no (return false;), e la funzione chiamante controllerebbe questo valore di ritorno per decidere cosa fare.