As this is untested, I recommend that you backup your hash table entries before trying this.

Usage is /purge

It should, determine the oldest time entry in the current hash table, then delete from the table those entries that match.

Code:
alias purge {
  var %a = 1, %b = $hget(seen,0).item, %oldest.time
  while %a <= %b {
    if (time.* iswm $hget(seen,%a).item) {
      if !%oldest.time || (%oldest.time > $hget(seen,%a).data) {
        %oldest.time = $v2
      }
    }
    inc %a
  }
  while $hfind(seen,%oldest.time,0,w).data {
    var %nick = $hget(seen,$hfind(seen,%oldest.time,0,w).data).item
    %nick = $gettok(%nick,2,46)
    .hdel -w seen $+(*.,%nick)
  }
}


If this works as I think, then you'll be able to use it to purge the oldest data when you want and/or have it called automatically if the number of entries in the table exceeds a certain level.