How to pass custom variables to BillingBlock.tpl?
To Override Main.tpl file - you can try using Main.extra.tpl which should work 

But Please try using - custom File - because if you are overriding the same file in some other extension it might not work sometime 

function hook_civicrm_buildForm($formName, &amp;$form) {
$templatePath = realpath(dirname(__FILE__)."/templates");
CRM_Core_Region::instance('billing-block')-&gt;add(array(
    'template' =&gt; "{$templatePath}/custom/custom.tpl",
));
}


and add your coding in the custom.tpl

Also please note that for billing address all the fields are hard coded in the core also same for validation - 

If you need more help please let me know - thanks