How to prevent a user from deleting an entity referenced node before deleting the referencing (child) node first?
You can use hook_node_access:


  Modules may implement this hook if they want to have a say in whether
  or not a given user has access to perform a given operation on a node.


The second parameter for this hook is $op:


  $op: The operation to be performed. Possible values:
  
  "create" "delete" "update" "view"


And the return values are:


NODE_ACCESS_ALLOW: if the operation is to be allowed.
NODE_ACCESS_DENY: if the operation is to be denied.
NODE_ACCESS_IGNORE: to not affect this operation at all.


So, you should implement that hook, check if the node being deleted is of type ItemRequest and if yes collect all the ItemOrder that point to it. If none are collected you can return NODE_ACCESS_IGNORE, if there're ItemOrder pointing to the ItemRequest return NODE_ACCESS_DENY.

While you can hook into the node form and add a custom validator that doesn't prevent user to delete the node using other means (admin content view, for example). This method can prevent any action trying to delete a node.