В общем, задача довольно проста - вызвать DeleteFile; если это не удается (т. е. DLL все еще заблокирована), тогда вызовите MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT. Однако, если DLL находится где-то в «Program Files», программа не сможет удалить ее без повышения привилегий. То есть пользователь должен будет повторно запустить программу как администратор и подтвердить повышение привилегий.