Here's one way...

Code:
On *:Start: {
  hmake topiclock 10
  if ($exists(topiclock.hsh)) hload -i topiclock topiclock.hsh
}

alias ut {
  if ($hfind(topiclock,$active)) hadd topiclock $active $iif($active ischan,$chan($chan).topic)
}

dialog topiclock {
  title "Topic Lock"
  size -1 -1 109 143
  option dbu
  combo 1, 4 4 102 107, size
  button "Add", 2, 24 113 27 9
  button "Rem", 3, 56 113 27 9
  button "Close", 4, 37 127 37 12, ok
}

On *:Dialog:topiclock:init:*: {
  var %x = 1
  while (%x <= $hget($dname,0).item) {
    did -a $dname 1 $hget($dname,%x).item
    inc %x
  }
}

On *:Dialog:topiclock:sclick:*: {
  if ($did($dname,1)) {
    if (!$hget(topiclock)) hmake topiclock 10
    if ($did == 2) {
      if (!$hfind($dname,$did($dname,1))) {
        hadd $dname $did(1)
        did -a $dname 1 $did(1)
      }
    }
    elseif ($did == 3) {
      if ($hfind($dname,$did($dname,1).seltext)) {
        hdel $dname $did($dname,1).seltext
        did -d $dname 1 $did($dname,1).sel
      }
    }
  }
}

Raw 332:*: { 
  echo -s $2
  if ($hfind(topiclock,$2)) hadd topiclock $2 $3-
  hsave -i topiclock topiclock.hsh
}

On @*:Topic:#: {
  if (($nick != $me) && ($hfind(topiclock,$chan))) {
    topic $chan $hfind(topiclock,$chan)
  }
}


It's channel specific so it should work in the channels you join.

1. Add a channel.
2. Join that channel (wont work if no topic is set).
3. Allow someone to change topic.
4. Topic is set back to the topic when you first joined.

Notes:

/tl - opens control panel
/ut - stores the current topic in the table (updates)

You will only change topic back if you are an op on the channel.

**Untested**

-Andy