Ideally you want to keep data_post hooks to a minimum where possible and I think this whole function would be better done in hook_data e.g.

exports.hook_data = function (next, connection) {
    var txn = connection.transaction;
    var cfg = this.config.get('bounce.ini');

    if (cfg.main.reject_invalid && !txn.mail_from.address() && txn.rcpt_to.length > 1) {
        return next(DENY, 'Bounce message contains more than one recipient');
    }

    return next();
}

This makes everything pre-DATA, so individual per-domain/per-user preferences can be applied if so wished.  Additionally if you review RFC5321 section 4.4; messages in-transit between SMTP system should not have a Return-Path header in almost all cases (might be an idea for a new plugin actually) as it is supposed to be added by server that is making the delivery to a non-SMTP transport (e.g. to a mailbox).