Como @Rob já mencionado , você só pode fazer isso se tiver acesso de gravação ao diretório que contém o arquivo. A tentativa de fazer a mesma coisa em um arquivo, por exemplo, /etc falhará.
Quanto a como vim está fazendo isso, ele exclui o arquivo e o recria. Para testar isso, criei um arquivo de propriedade do root:
echo foo | sudo tee fff
Em seguida, continuei a editar o arquivo com vim da maneira que você descreve, mas anexando o processo a strace para ver o que está acontecendo:
strace vim fff 2> strace.out
Em seguida, verifiquei strace.out e encontrei:
unlink("fff") = 0
open("fff", O_WRONLY|O_CREAT|O_TRUNC, 0644) = 4
write(4, "foasdasdao\n", 11) = 11
Assim, o arquivo foi excluído primeiro ( unlink("fff") ), então um novo arquivo com o mesmo nome foi criado ( open("fff", O_WRONLY|O_CREAT|O_TRUNC, 0644) ) e as modificações que eu fiz foram gravadas nele ( write(4, "foasdasdao\n", 11) ). Se você tentar isso em casa, verá que depois de editá-lo com vim , o arquivo agora pertencerá a você e não ao root.
Então, estritamente falando, vim não está editando um arquivo para o qual você não tem acesso de gravação. Ele está excluindo um arquivo de um diretório para o qual você possui acesso de gravação e, em seguida, criando um novo arquivo para o qual, novamente, você tem acesso de gravação.