Dunque, chiariamo che le sessioni e i cookie sono due cose diverse e indipendente. Quindi, prima di tutto, la durata della sessione è diversa da quella del cookie e dipende principalmente dalla configurazione di php.
Cmq da quel che ho capito questo sistema registra in sessione una variabile php e manda una e-mail all'utente, l'utente deve poi controllare l'email e cliccare sul link di conferma, che lo rimanda al tuo sito.
Io credo che l'inghippo nasca dal fatto che l'utente entra nel tuo sito, esce poi da esso per controllare l'e-mail e vi rientra dopo. Peccato che nel momento in cui esce dal sito per controllare l'e-mail la sessione del tuo sito viene persa.
Gli utenti che riescono a iscriversi lo fanno perché, probabilmente, aprono il sito della posta in un'altra finestra o usano un client di posta.
In parole povere, session non ti basta per fare questo tipo di lavoro.
Hai detto che usi i cookie e questo in teoria funziona ma potresti usarlo nel modo sbagliato, posta il codice che è meglio.
Comunque si può ottenere lo stesso risultato anche senza usare nè cookie nè sessioni: registri il nuovo utente nel db come utente "da confermare" e lo rendi definitivo solo quando clicca sulla e-mail.