Почему в Linux приложение может удалить само себя, а в Windows нет?
Когда процесс открывает файл, он открывает дескриптор на определенную структуру данных. Эта структура содержит аттрибуты файла, права доступа, информацию о том, где хранятся данные файла и так далее.

В Win и *nix эта информация хранится в разных местах, и соответственно лок происходит по-разному.

В POSIX системах (unix, linux, etc.) информация о файле хранится iNode, а имя файла уже ссылается на iNode.

В Windows и DOS изначально информация о файле хранилась в структуре которая называется Directory Entry. В NTFS это немного изменилось, но подход они не меняли либо для обратной совместимости, либо не видели в этом нужды.

Собственно отсюда исторически и выросло, что в *nix при открытии файла дескриптор указывает на iNode, а само имя файла можно при этом свободно удалять, или делать несколько имен ссылающихся на одну iNode (hard link), которые можно произвольно менять, пока "файл открыт".

В Windows лочится непосредственно Directory Entry (или ее аналог в NTFS), следовательно его модифицировать в этот момент нельзя.

У обоих подходов есть свои плюсы и минусы и история. Пока нет предпосылок к тому, что на Windows захотят изменить подход.
в Linux при удалении приложение(файл) остаётся в ОЗУ до перезагрузки или остановке процесса. Windows же закрывает все связанные процессы(или пытается) и удаляет файл, более не исполняемый.
Так можно удалить все корневые директории в Линукс и система будет работать, но при перезагрузке она не запустится.