I liked your idea so much that I took your script and worked it up a small amount an am using it myself now all the time, I have also taken on Iori's comments, i thought id share it to show what I thought of that might improve it.

Code:
alias QuerWindow {
  set %QuerWindow $+(@Message,$chr(160),Queuer)
  if (!$window(%QuerWindow)) { window -deSl11k0 %QuerWindow 245 250 594 266 @Quer.MENU }
  return %QuerWindow
}
;
on ^*:Open:?:*: { quer.open.and.text.event $1- }
on ^*:Text:*:?: { quer.open.and.text.event $1- }
alias quer.open.and.text.event {
  mkdir QuerLogs
  write $+(QuerLogs\Quer.,$nick,.txt) $+([,$time(HH:nn),] <,$nick,>) $1-
  aline -ln $QuerWindow $nick 
  if ($sline($QuerWindow,1) == $nick) { aline -pi $QuerWindow $+([,$time(HH:nn),] <,$nick,>) $1- }
  closemsg $nick | halt
}
;
menu @Quer.MENU {
  lbclick: {
    sline -l $QuerWindow $1
    clear $QuerWindow
    if ($sline($QuerWindow,0) == 1) {
      quer.titlebar 
      loadbuf -pi $QuerWindow $+(QuerLogs\Quer.,$sline($QuerWindow,1),.txt)
    }
  }
  Close $$1 Conversation: {
    if ($sline($QuerWindow,0) == 1) {
      clear $QuerWindow
      dline -l $QuerWindow $sline($QuerWindow,1).ln
    }
  }
  Delete $$1 History: {
    if ($sline($QuerWindow,0) == 1) {
      clear $QuerWindow
      dline -l $QuerWindow $sline($QuerWindow,1).ln
      .remove $+(QuerLogs\Quer.,$1,.txt)
    }
  }
}
;
on *:input:@:{
  if ($active == %QuerWindow) {
    if ((%QuerTextWin) || ($ctrlenter) || (/* !iswm $1-)) { .quer.msg $1- }
    else { .timer 1 0 savebuf $QuerWindow $+(QuerLogs\Quer.,$sline($QuerWindow,1),.txt) }
  }
}
alias quer.msg {
  if ($sline($QuerWindow,0) == 1) {
    if ((%QuerConfirmOff) || ($input(Secure Send Message $+ $crlf $+ Send this message to $sline($QuerWindow,1) $+ ? $+ $crlf $+ $crlf $+ $1-,c,Send Message.) == $true)) {
      PRIVMSG $sline($QuerWindow,1) $1-
      aline -p $QuerWindow $+([,$time(HH:nn),] <,$me,>) $1-
      haltdef
    }
    else { editbox $QuerWindow $1- }
    savebuf $QuerWindow $+(QuerLogs\Quer.,$sline($QuerWindow,1),.txt)
  }
}
;
on *:Keydown:%QuerWindow:*: {
  ;splay sounds\typewriter.wav
  if ($keyval == 18) { 
    var %cycle = $!false $!false/$true $!false/$true $!true/$false $!true/$false $!false
    var %cycle = $gettok(%cycle,$calc($findtok(%cycle,%QuerTextWin %QuerConfirmOff,1,47)+1),47)
    set %QuerTextWin $gettok(%cycle,1,32)
    set %QuerConfirmOff $gettok(%cycle,2,32)
    Quer.Titlebar
  }
  elseif ($keyval == 27) { window -c $QuerWindow }
}
;
alias Quer.Titlebar { titlebar $QuerWindow - Conversation with $sline($QuerWindow,1) - $iif(%QuerTextWin,TW,NW) - $iif(%QuerConfirmOff,IM,CM) }


Top down...
(1) I Dont like hardcoding window names into scripts if i can avoid it, so I call an $identifier alias to get me the window name, it also creates the window if its not there , and stores a global var of the name. $QuerWindow (i happend to have renamed the window, but its the first line of the alias so not hard to see smile )
(2) I identify the menu by naming it on the window creation line, lets me rename the window without having menu problems.
(3) triggering on OPEN and TEXT events, doing a closemsg and halt at the event ends to cover for both
(4) you should only write the event line text to the window if the matching $nick is the highlighted one, you were doing it all the time
(5) changed to lbclick, and set the only selected line to the one u just clicked on, since you can only see one at a time.
(6) used /clear instead of dline to clear the window, also clearing the window in the close and history options
(7) changed the titlebar of the window rather than renaming the window
(8) on *:input:@: and not on *:input:%QuerWindow: becuase mirc is broken and doesnt accept a var in there, so i just check if its the $active window
(9) accounted for /commands being entered and/or ctrlenter being pressed
(10) I thought it better to savebuf the whole window, that way you get results of any command you ran that did local echos etc, anything that appeared in the window etc
(11) Pressing ctrl-alt cycles through 4 states the window can be in TW or NW and CM or IM
* TW is a text only Window if you type /echo BLAH its send like you have the ctrl key down with enter
* NW is a normal window behavour
* CM is Confirm the message send
* IM is instantly send the message