I think I just solved my own problem. :)
I set the minimum length for province/state and postal code to 0, then (after some poking around to figure out what needed editing) opened up tpl_modules_create_account.php and saved a copy of it in my custom template folder, and commented out line 99:
And part of line 110 as follows:
// if (zen_not_null(ENTRY_STATE_TEXT)) echo ' <span class="alert" id="stText">' . ENTRY_STATE_TEXT . '</span>';
(remembering to put a semicolon at the point where I broke the line.
<?php echo zen_draw_input_field('postcode', '', zen_set_field_length(TABLE_ADDRESS_BOOK, 'entry_postcode', '40') . ' id="postcode"');
// (zen_not_null(ENTRY_POST_CODE_TEXT) ? '<span class="alert">' . ENTRY_POST_CODE_TEXT . '</span>': '');
So... For anyone else who's wanting to make some customer fields optional, apparently this is how you do it.