Best practices for user registration with WordPress from an MVC background

The basic building block of WordPress templating is template tag, that is function echoing (the_*()) or returning (get_*()) specific information. It’s no that far off from other kinds of templating, the largest difference is that WP “context” is typically much larger, way less contained, and rarely controlled by developer directly much.

Form workflows in WordPress are historically very messy, with large volumes of historical code and APIs that make everyone groan (like Settings API).

In a nutshell your goal should be to engineer it in a way that is convenient and maintainable for you, since WP offers little guidance for it.

Answering the direct part of question — yes, it is perfectly normal for WP functions to echo, either called directly in template tag fashion or being used in hooks, meant for additional output.