When the code in your init file runs, there are no open files at all. vc-mode is only set when a file is finally opened and determined to be in version–controlled. This means that when it runs your init file and evaluates vc-mode, it puts the nil value into the list that goes into mode-line-format. That nil is then skipped whenever the mode line is displayed....
Put the make-local-variable after the setq-default:
(setq-default bar "xyz")
setq-default sets the global value. Doing what you did says there is a local value for bar, but it doesn't set that local value. And neither does setq-default set that local value.
Doing it with what ...