The problem I am having is that when I use the HTML 5 field types such as "tel" and the form gets completed with errors, on reloading those fields are empty and so require being filled out again.
If you are hardcoding the input tag you will need to somehow print the post into the value as a default value as well if you want the value there when there are server side errors and the form shows the same page again, it's pretty ugly.
You could maybe try and use a keyword modifier to change the type="text" value to type="tel" instead.