Exclude Posts Using Meta Query and User Meta

A simpler approach would be to store a list/array of post-ids of the posts which have been marked read by the user in his user_meta. Then retrieve this array for every logged-in user, and run the wp_query using the post__not_in parameter with the array as the argument.