Ammetto che non ho molta voglia di rileggere tutto!
Cmq, se hai una lista di domande, le quali possono essere lette tramite un indice (ad esempio se le domande sono proprio in un oggetto List e quindi si possono ottenere tramite MyList.Get(index)) ti basterà creare una List contenente gli indici (che so, mille domande, lstIndici.Add(0), lstIndici.Add(2)... lstIndici.Add(999)).
Quindi:
IndiceDomandaScelta = Rnd(0, lstIndici.Size)
lstDomande.Get(IndiceDomandaScelta)
lstIndici.RemoveAt(IndiceDomandaScelta)