How can I prevent Contribution Pages forcing the email to be of type Billing
One solution is to create your own custom module/plugin to do what is required. Steps:


Use hook_civicrm_postProcess hook for the target contribution page, you can give the contribution id or name in if condition.
Use civicrm contact create api call to edit email address type.