How to change footer credit text in Twenty Twenty One theme with a hook?

That snippet contains no hooks, so there isn’t anything for you to hook onto.

If instead the file had something like:

<div class="powered-by">
    <?php
        echo apply_filters( 'credit-text', 'Powered by <a href="https://wordpress.org/">WordPress</a>' );
    ?>
</div>

Then you could do something like:

add_filter( 'credit-text', 'wpse385946_credit_text' );

function wpse385946_credit_text( $credit ) {

    return 'Site by <a href="/">Me!</a>';

}

There’s an added complication with the translation functions in the original theme: you don’t want to use variables in them if the text in the variable might need translating. If your theme is for a private site rather than for publication, then translation might not be an issue for you.

IMO using the built-in template hierarchy with a child theme is the simplest way to do this. When you or anyone else comes back to the theme later, it’s then obvious how your change works. If you have a really compelling reason to do this in your functions file you could possibly hook into get_template_part somehow but it seems a pretty convoluted way to do something that the template hierarchy does for you already.