The reason is that this is the signature that we’re currently using for all TVM-generated functions. To call a function like that all you need to know what parameters the function takes. This is essentially the definition of TVM-specific ABI, but on the level of the C language. This allows compilers to generate the same steps to call any function.
If you want to develop a different ABI, it will need to be used for all external calls to functions generated by TVM, or else we lose that universality.