Depois de mexer, eu vim com o seguinte. É um pouco de kluge, mas parece funcionar:
augroup ReplaceReturn
autocmd!
autocmd InsertEnter * if v:insertmode ==? 'r' | call s:RedefineReturn() | endif
augroup END
function! s:RedefineReturn()
inoremap <cr> <down><c-o>0
inoremap <silent> <esc> <esc>:call <SID>UndefineReturn()<CR>
endfunction
function! s:UndefineReturn()
if maparg('<cr>', 'i') != ''
iunmap <cr>
iunmap <esc>
endif
endfunction