Non e' il massimo dell'eleganza ma potresti eventualmente considerare di inserire una colonna "confermato" a tutte le tabelle che ti servono.

Dopodiche' non fai altro che modificare le tue select in giro in modo da tirare fuori dati con confermato=true

Visto che non c'e' modo per fare in modo che il PHP esegua operazioni pianificate e visto che mysql non supporta ne' i trigger ne' le stored procedures, l'unica soluzione che vedo per adesso e' una cosa del genere: al caricamento di una pagina fai in modo che con probabilita' 0.01, ad esempio (dipende molto dalla frequenza di accesso alla pagina) fai il delete di tutti i dati con confermato=false (consiglio caldamente un indice sulla colonna).

Alternativamente potresti fare una cosa del genere: salvare dove ti pare (DB, file di testo..) la data/ora dell'ultimo DELETE massiccio. Al caricamento di ogni pagina se il tempo che e' passato dall'ultimo cleanup e' > 30 minuti (o quanti minuti pare a te) aggiorni la data/ora in questione e lanci il cleanup.

Come vedi sono accrocchi, ma in assenza di trigger non c'e' molto da fare.