Isso parece funcionar.
function! CustomComplete(type)
set iskeyword+=-
return a:type
endfunction
inoremap <expr> <C-B> CustomComplete("<C-N>")
autocmd CompleteDone * set iskeyword-=-
Usamos um mapeamento de expressão para executar a função que define iskeyword toda vez que é executada (não parece ser um problema. Eu também não encontrei um autocmd antes da conclusão.) O valor de retorno de a função é então usada como substituta do mapeamento. Nesse caso, você queria o comportamento <C-N> . Em seguida, para remover o conjunto - do conjunto iskeyword, usamos o CompleteDone autocomand, o que acontece após a conclusão da conclusão.
Também experimentei os dois mapeamentos. O primeiro deles não funciona como esperado, uma vez que também possui <C-O> , o que mata a janela de conclusão.