Why we go for template files and why we go for theme function?
I always think of it like this:

If you need to write a fair bit of HTML for your theme then you want a template file. This way you can maintain as much separation HTML and PHP as you'd like.

If you theme is just accepting data and putting that data through (say) another theme function, then you're not going to be writing any/much HTML. In this case a theme_* function is more appropriate in my opinion.

I don't think there really is an "all time best way", both methods are appropriate for different situations.