Quando um processo abre um identificador para um arquivo ou diretório, ele especifica qual nível de compartilhamento ele deseja. O nível de compartilhamento pode ser qualquer combinação dos sinalizadores FILE_SHARE_DELETE, FILE_SHARE_READ e FILE_SHARE_WRITE. Os nomes das bandeiras são bastante óbvios. Se eu especificar FILE_SHARE_READ isso permite que outros processos leiam o arquivo, FILE_SHARE_WRITE permite que outros processos gravem o arquivo (possivelmente alterando-o sob meus pés) e FILE_SHARE_DELETE permite que outros processos excluam o arquivo (embora eu ache que ele não seja deletado até depois que eu fecho meu identificador de arquivos).
De qualquer forma, se algum processo abrir um identificador para um arquivo e não especificar FILE_SHARE_DELETE, isso significa que nenhum outro processo pode excluir o arquivo até que o primeiro processo tenha fechado seu identificador. Esse é o motivo comum para você obter esses erros "o arquivo está bloqueado por outro processo". Observe que os processos também podem abrir alças para diretórios, portanto isso também se aplica à exclusão de diretórios, mesmo que estejam vazios.
Quanto ao motivo pelo qual você pode excluir um arquivo de um prompt de comando quando não é possível excluí-lo do Explorer, não entendo por que isso aconteceria. Eu precisaria ver com meus próprios olhos.
JR