Just a thought. The only valid reason I can think of is if the company would need to let 3rd parties (OEM clients, installers but not end customers) run their code on the devices.
If you give a C code API you can get into problems since the 3rd party developers could easily crash your device, blaming your company and you can go search for the cause.
You can only give access to your devices if the code and allowed memory to use is fully contained, so think virtual machine. You don't want C pointers to any memory location and allowing others to overwrite their and your buffers. Or even worse, read out your valuable firmware code
No you want and need proper limited access and AFAIK a JVM might be able to do just that
.
If you are wondering what the applications are, besides the well known apps on iOS and android where you do not want a developer to crash the entire device with their faulty app, well sometimes you have trust issues where two or more companies in multiple domains meet eachother. For instance in an office building where one company regulates the HVAC another company does the shutters for the windows another company controls the AV equipment and yet another company controls the lighting. You eventually want the user to be able to control all these devices with one device or controller but the companies want to sell their controller (software).
Not one of those companies want to open up their interface so another company can take advantage and control it fully.
So there is where often these weird constructions are created.