You're example is not a static typing issue. It's a feature of the library that the struct field doesn't have to have the same name as the form field.
I think the issue is more of a DRY thing, which could maybe be fixed with something like:
type User struct {
FirstName string `form:lowercase_hyphenated`
LastName string `form:lowercase_hyphenated`
}
This hypothetical syntax would instruct the library to look for the form fields "first-name" and "last-name".