Как всегда, всё было просто... Надо было на некоторое время отвлечься от проблемы.
Решил вопрос с залипшей клавишей перехватом не только отпускания клавиши, но и нажатия. А в обработке нажатия активирую флаг, который потом проверяю.
Т.о. если нужная мне клавиша была нажата и отпущена, выполняется перехват с не пусканием события дальше и определённый код. А если эта клавиша была нажата в сочетании с другой (в таком случае мне это событие не интересно), то опять же перехватываю событие и выполняю keybd_event со своим dwExtraInfo для проверки зацикливания.