I managed to get it to work using this method. What I had wrong was I was still passing the form to the callback by reference.
In my case, I was adding to the existing body. Here is my final code that worked:
add_action('wpcf7_before_send_mail', 'wpcf7_update_email_body');
function wpcf7_update_email_body($contact_form) {
$submission = WPCF7_Submission::get_instance();
if ( $submission ) {
$mail = $contact_form->prop('mail');
$mail['body'] .= '<p>An extra paragraph at the end!</p>';
$contact_form->set_properties(array('mail' => $mail));
}
}
I hope this helps.