Sono riuscito a risolvere il problema e se può interessare vi spiego la procedura:

per prima cosa anzichè il tag <input type="submit" value="invia" /> che produce l'invio immediato del form ho messo un più generico <input type="button" value="invia" />

In questa maniera quando io clicco sul pulsante il form non parte e io posso gestire tutto da un onclick che inserisco nel tasto stesso. In pratica il mio pulsante esce così:

<input type="button" onclick="accesso();" value="Invio" />

A questo punto il gioco è fatto, perchè tutto viene gestito direttamente dal javascript, compresa la funzione di invio del form. In pratica la funzione accesso() dovrebbe essere una cosa del genere:

function accesso() {
.
.
.
codice da eseguire
.
.
.
setTimeout(function() {document.nomeform.submit();}, 10000);

return false;
}


In questa maniera posso gestire senza alcun problema il ritardo nell'invio del form e far eseguire tutte le funzioni che mi interessano prima che il form parta.
L'unico difetto di questo metodo è che, a questo punto, l'utente deve PER FORZA cliccare sul pulsante "Invia" per far eseguire il form. Se compila i campi e batte semplicemente il tasto invio sulla tastiera non funzionerà.
Ma se si vuole fare gli sboroni anche questo è facilmente risolvibile: basta inserire in ciascuno dei campi del form (o, eventualmente, solo in quelli che si vuole causino l'invio del form con la pressione del tasto) un evento del tipo onkeypress="tasto(event);"

A questo punto basterà scrivere la funzione tasto() in questo modo:

function tasto(e)
{
if (e.keyCode == 13) {
accesso();
return true;
}
else {
return false;
}
}

In questo modo se alla pressione del tasto viene rilevata la pressione dell'invio, lui esegue la funzione accesso() (che, a sua volta, invierà il form dopo il timeout definito), altrimenti se il tasto premuto è diverso, non fa niente.

Spero di essere stato chiaro e, soprattutto, utile