Я в таких случаях делаю так:
## Код:
```
MODULE A;
...
VAR
  dir-, stdDir- : Directory;

PROCEDURE RemoveDir* (d : Directory);
BEGIN
  IF d = dir THEN dir := stdDir END
END RemoveDir;
...
END A;
```

## Код:
```
MODULE B;
...
CLOSE
  A.RemoveDir (dir)
END B;
```


Хотя всех проблем это не решает (нельзя перезагрузить модуль с сохранением его данных в памяти), но корректную выгрузку обеспечивает. Правда со стандартными модулями ББ такое не прокатывает