Well, apart from required fields not filled in, there are other error scenarios which still require that the form is shown to the user once more (e.g. uploading files of unsupported type, uploading too large files, supply a string as an email-Address which does not meet the criteria of being an email address, etc.). And, not to forget: Although most clients support the required-attribute nowadays, the validation on the server should not rely on a particular feature of the client. A malicious user could send manipulated data where some required fields are missing deliberately. If fields are made "required" the form has to ensure that in successful submissions these fields are at least filled in "somehow", and we have to double check this on the server side. Further validation of the data is possible in the user-defined functions by the way.
Anyhow, I understand the argument of convenience for the end-user, and therefore I have implemented this feature. I just wanted to point out that we can not avoid the reloading pages completely. We need them for cases in which server-side checks fail on the inserted data.
About the checkboxes: Probably one would have to create a js function for each checkbox group that clears the required attribute on all other checkboxes of the same group as soon as one of them is selected (and adds it again when the last one is unchecked) and assign it to the onchange event.