Proper way to create custom static page

As has been mentioned, your way works, but there are some ways you can decouple the form from the template, allowing more flexibility.

The Shortcode API allows you to create a shortcode for your form, so you can simply enter something like [my_form] in the page’s content, then within the function that handles your shortcode you can render the form and enqueue the necessary scripts. For the CSS, you can hook an action before the template is rendered to perform some regex on the requested page’s content to see if it contains the shortcode, so you only enqueue the stylesheet when it’s needed.

In general, you should familiarize yourself with filters and actions, these are the basis for just about everything you’d want to do in WordPress. For example, to process your form data, you could add an action to init to check if your POST vars exist and do whatever processing, database writes, redirection, etc., that you’d need to do, keeping your form independent of the template or page it’s rendered on, or you can filter the_content to check the current requested page and render your form that way.