Why doesn't print module_invoke('user', 'block', 'view', 0); use template files?
The code module_invoke('user', 'block', 'view', 0) eventually calls user_block('view', 0). The user_block function returns an array in this case; that's just how hook_block works. The documentation for hook_block says:


  If $op is 'view': return an array which must define a 'subject'
  element (the localized block title) and a 'content' element (the block
  body) defining the block indexed by $delta. If the "content" element
  is empty, no block will be displayed even if "subject" is present.


If you want to know how to render this block, check this comment on the theme_block documentation page.