Modificar dinamicamente o grupo StatusLine highlight é a abordagem errada. Isso substitui quaisquer predefinições do esquema de cores e parece não funcionar (talvez a adição de um :redraw[status] possa ajudar, mas isso tornaria a implementação ainda mais feia).
O Vim permite especificar um grupo de realce personalizado na linha de status (até múltiplo), com o símbolo %#HLname# . Veja :help 'statusline' para detalhes. Você pode alterar dinamicamente o valor 'statusline' (isso também permite cores diferentes para diferentes linhas de status) ou usar a abordagem %!MyStatusLine() que reavalia o próprio valor.