OK, so you have something like a profile post linked to the user (entry) and then you link that post to the challenge post.
It sounds like the way you are connecting them (the entries and challenges) is to effectively manually maintain a kind of relationship between them.
I suspect you would be better served by using Toolset Relationships, with a many-to-many relationship between entries and challenges, in which case you would be able to add a relationship query filter to your View.
To learn more about that see https://toolset.com/related-lesson/post-relationships/
If you want to persist with your current implementation, you will likely need some custom code to implement what you are looking for.
"This is obviously easy to do with a standard query but not sure how to implement this in views."
Regarding the last part, the query part of Views is basically just a visual UI for passing WP_Query arguments, i.e. it is built on top of the core WordPress query class. So most things you can do with a "standard query" you can do with Views.
Where you can't you can use the Views API (specifically the wpv_filter_query filter: https://toolset.com/documentation/programmer-reference/views-filters/#wpv_filter_query) to modify the query arguments as required before the query is created.
Your problem is, I think, more fundamental.
When you query something you can filter the query by properties of the thing being queried.
So if you are filtering challenge posts you can filter posts by properties of challenge posts, including its custom field values.
But you want to filter by something which is a property of something other than that which is being filtered, i.e. the challenge_id field stored on entry posts.
(It would be like saying "show me Premier League football clubs with a population greater than 1 million". Football clubs don't have populations, although they are associated with towns and cities, which do.)
One solution is to run the query in two parts. Create a View for challenge posts that just has the date query.
Then use the wpv_filter_query hook, and run your own query (via get_posts) to get any entries for the current user, and extract the challenge_id values from those posts into an array, and then update the View query arguments with an entry for 'post__not_in' where you pass it that array. So any challenge posts that the current user has already created an entry for will be excluded from the results.