да, есть мануал.
загляни в секцию "Extending PHP 4.0 - Creating variables".
основная идея - в пхп 3 типа переменных:
1) не использующие хеш-таблицы для хранения (числа, строки, булевые переменные)
2) использующие хеш-таблицы для хранения (массивы, объекты)
3) использующие определенные пользователем структуры для хранения
так вот, пхп знает, как освободить память у 1 и 2 при вызове unset. в zend api, они соответственно имеют тип zval*
он понятия не имеет, что в себе содержат определенные пользователем структуры 3.
в этой структуре могут быть всякие хитрые открытые дескрипторы, с которыми в свою очередь ассоциирована память. выделением и освобождением этой памяти занимается API какого-то конкретного продукта (mysql, curl, windows com ...).
при создании переменной типа 3, надо еще регистрировать функцию обратного вызова - "деструктор" - которая будет правильно освобождать память, занятую этой структурой и правильно закрывать все дескрипторы.
так вот, unset(...) эту функцию обратного вызова ("деструктор") по идее дергать не умеет. ее умеет дергать только garbage collector, который освобождает память после завершения работы скрипта. может, так устроено потому, что освобождение памяти и закрытие дескрипторов может занять много времени для хитрой структуры.
я в исходники не лазил, по глядя на обилие функций типа "fclose(...), mysql_free_result(...), ...", подозреваю, что все-таки прав.