Maybe you can get bzr to give you the on-the-fly status output by running the process in a tty rather than through a pipe. For that, just let-bind process-connection-type
as in:
(let ((process-connection-type t))
(start-process ...))
But IIRC this value already defaults to t, so maybe the problem is elsewhere. Maybe bzr checks the $TERM to see if it can correctly update the output. So maybe you can try
(let ((process-environment (cons "TERM=xterm" process-environment)))
(start-process ...))