Ciao,
potresti utilizzare il metodo splice alla fine del ciclo for (o dove meglio credi) per eliminare di volta in volta le voci di quests e di answers che vengono utilizzate.

Una cosa del genere (in rosso le parti aggiunte):

codice:
for(qpp=0;qpp<questPerPage;qpp++){
  q=Math.floor(Math.random()*quests.length)
  htmlStr+="Q#"+qpp+": "+quests[q]+"
A: ";
  rightAnswer[qpp]=answers[q][0]-1;
  for(a=1;a<answers[q].length;a++){
    htmlStr+="<input name='ansr"+qpp+"' type='radio' value=''><label>"+answers[q][a]+"</label>  "
  }
  htmlStr+="

";
  quests.splice(q,1);
  answers.splice(q,1);
}
Ovviamente ho riportato giusto la parte di script interessata, che sta dentro la funzione showQuestion.