At first I was thinking about $hfind(w), but with the w-method you'd likely wildmatch "lines" (whole data-blocks) even if they don't contain a specific "word" that's wildmatching your search term. I therefore used $hfind(r) aka a regex search. It should perform more efficient in this case (at least that's what I was after :D).
As a big downside, the code is of very little use if you want to learn about hash tables in general. Feel free to ask questions tho... I generally suggest to look for other scripts that use hash tables - you can learn a lot if you study real code after the helpfile smile

Code:
; syntax: /delhashtokens *a*wildc?rd-expres*n

alias delhashtokens {
  ; put the name of your hash table here 
  var %t = TABLENAME

  ; create a regular expression ouf of the "wildcard"-word $1.
  ; the expression should only match lines that contain any "word" wildmatching your expression - in contrast to a "line" wildmatching your expression.
  ; ( it quotes $1 so no text char is treated as "metachar", replaces the wildcards */? with regex-equivalents, and adds lookarrounds to match like a $istok(,32) )
  var %ex = $+(/,(?<=^|\s)\Q,$replacexcs($$1,*,\E\S*\Q,?,\E\S\Q,\E,\E\\E\Q),\E(?=\s|$),/)
  ; loop all items matching the regular expression 
  var %n = $hfind(%t,%ex,0,r).data
  while (%n > 0) {
    ; the current item and it's data
    var %item = $hfind(%t,%ex,%n,r).data, %data = $hget(%t,%item)
    ; find and remove all the "words" from the data that wildmatch the original expression
    while ($wildtok(%data,$1,1,32)) { var %data = $deltok(%data,$findtok(%data,$v1,1,32),32) }
    ; delete item if no data is left or save the new data
    $iif((%data == $null),hdel,hadd) %t %item %data
    ; proceed with next item
    dec %n
  }
}
Side note: backup your .dat file first, I didn't test this at length smile

About limiting the data length to avoiod the errror in the future, I can give only an example so you might get the idea...
Code:
; original code example

; adds a new word to the data by overwriting it with "current data + new word" (the new word being "$nick")
hadd TABLE ITEM $hget(TABLE,ITEM) $nick


; new code example

; if current data exceeds a certain length: remove the "oldest" (first) 4 words by re-adding only the 5th word onwards together with the new word
var %data = $hget(TABLE,ITEM)
if ($len(%data) > 4000) { var %data = $gettok(%data,5-,32) }
hadd TABLE ITEM %data $nick


Edit: shorter expression