Аналог unset в ООП?
Вы неверно поняли. 
Unset - удаляет переменную 
__destruct выполняется когда все ссылки на переменную освобождены 
<?php

class User {

public $name = "Bankai", $age = 40;

function show(){
echo "$this->name:$this->age <br>\n";
}

function __destruct(){
echo "Деструктор \n";
}
};

$obj = new User();
$obj->show();

$obj2 = $obj;
unset($obj2);
var_dump("__destruct not calling");
unset($obj);
var_dump("__destruct called");
Результат:
Bankai:40 <br>
string(22) "__destruct not calling"
Деструктор 
string(21) "__destruct called"

Освобождение ссылок на переменную не означает вызов деструктора так как ссылка объект может быть еще в других переменных.

Деструктор невозможно переписать в процедурном стиле, это чисто объектное поведение.
деструктор это аналог unset()Деструктор — функция, которая вызывается при уничтожении объекта. В ней можно, например, сохранить текущее состояние куда-нибудь. Она будет исполнена при вызове unset().

$fun = function($name1, $age1){
echo "$name1 $age1 <br>";
echo "Деструктор";
};Это не деструктор. Это вывод строки. Никакого отношения unset($fun); (уничтожение значения переменной) к выводу строки и выполнению кода лямбда-функции не имеет.