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.