Why do you need to change the a4j:commandButton? If you want to use a4j:status you need to use an a4j component, other components cannot set the status.
I had to change a4j:commandLink to h:commandLink because the onsubmit function of h:form was not getting invoked when a4j:commandLink was clicked. With this change, the onsubmit function is getting invoked but like you have mentioned a4j:status is not working.
Is there any way I can use both the functionalities i.e., ensure that the onsubmit as well as the a4j:status works hand in hand?
Ah ok. AJAX requests do not submit the form so you cannot listen to the onsubmit event and submitting the form would mean the whole page gets reloaded so a4j:status would be useless anyway. To prevent the submission use onclick of the commandButton.