wp_list_comments()
has no filters or hooks so its going to be a bit hard, what you can do is use comments_array
filter hook
add_filter('comments_array','my_custom_comments_list');
function my_custom_comments_list($comments, $post_id){
//if criteria are met
//pull your comments from your own table
//in to an array and return it.
return $my_comments;
//else return $comments
}
and as for “intercept the comment submit and process” chips answer would be the best way using preprocess_comment
filter hook but you want be able to avoid WordPress form inserting the comment to the default table as well, so you can use wp_insert_comment
action hook to remove the comment from the default table right after its inserted:
add_action('wp_insert_comment','remove_comment_from_default_table');
function remove_comment_from_default_table( $id, $comment){
//if criteria are met
//and the comment was inserted in your own table
//remove it from the default table:
wp_delete_comment($id, $force_delete = true);
}