Если исключение выдается во время выполнения фрагмента кода, защищенного критическим разделом, то есть кодами между «lock ()» и «unlock ()», это означает связанный объект, над которым работает фрагмент кода больше не в действительном состоянии. При этом может быть или не быть откатом при автоматическом раскручивании стека, инициированном исключением, потому что некоторый побочный эффект мог иметь место до того, как сгенерировано исключение (сообщение было отправлено через сокет, компьютер был запущен, например). На данный момент, большая проблема здесь не в том, будет ли освобожден мьютекс (единственная гарантия использования lock_guard вместо этого). Вполне может быть, что некоторые случаи, когда мьютекс по-прежнему заблокирован, является желательным поведением и может быть явно сброшен после очистки вызывающей стороны всей путаницы.
Моя точка зрения такова: это не проблема языка. Никакая языковая функция не может гарантировать правильную обработку ошибок. Не принимайте lock_guard и RAII как серебряную пулю.