You have to delete the token from the hash table entry.
Made a few other modifications to your script which will actually make it work better.


Code:
  ;Hash Table Shitlister by Mail 
on *:start: { 
  hmake shitlist 100  
  if ($exists(shitlist.txt)) { hload shitlist shitlist.txt  }
} 

on ^*:text:*:#: { 
  if ($1 === ![censored]) && ($me isowner $chan) { 
    hadd -m shitlist chan $chan 
    if ($2 ison $chan) { hadd -m shitlist address $addtok($hget(shitlist,address),$$ial($$2,1).addr,32) } 
    if ($2 !ison $chan) { hadd -m shitlist $addtok($hget(shitlist,address),$2,32) } 
    msg $hget(shitlist,chan) $2 Has Been Added To My Shitlist 
    access $chan add DENY $$ial($$2,1).addr 1440 
    kick $chan $2 Shitlisted 
    hsave -o shitlist shitlist.txt 
  } 
elseif ($1 == !unshit) && ($me isowner $chan) {
.hadd -m shitlist address $remtok($hget(shitlist,address),$2,1,32)
}
} 
on *:exit:{
.hsave -o shitlist shitlist.txt
}
on *:disconnet:{
.hsave -o shitlist shitlist.txt
}
on *:Join:*: { 
  if ($me isowner $chan) && ($address isin $hget(shitlist,address)) || ($nick isin $hget(shitlist,address)) { 
    access $chan add DENY $$ial($nick,1).addr 1440 
    kick $chan $nick Shitlisted 
  } 
} 
menu nicklist { 
  .Add [censored]:hadd -m shitlist $$ial($$1,1).addr $snicks(#,0) | hadd shitlist chan $chan | hsave -a shitlist shitlist.txt 
}