reicht is the third person singular form of reichen, agreeing with the third person singular pronoun es.
As for when you would use the verb reichen or the adverb genug, that is a slightly more tricky question which I feel in many cases doesn’t have a definite answer. The main difference is probably that with genug being an adverb, you still have to supply a separate verb, which means that you usually have to be a bit more specific about the context (where/for whom/for what purpose something is enough). With reichen already being a verb “to be enough” by itself, it’s easier to leave the background information open to context, which can help reduce repetition.
In terms of idiomatic use, I think it’s a valid translation as long as you are talking about being fed up rather than literally having a sufficient amount of something. For example I would translate “Wir haben genug von deinen Streichen” as “We’ve had enough of your tricks”. It might be that Duolingo is being nitpicky about the tenses because strictly speaking the German sentence is present tense and perfect “Wir haben genug gehabt” would be grammatically closer to your English sentence. But if you ask me, “We have had enough” should be accepted. So feel free to report it next time it comes up.
Not directly at least. reichen is a verb which means “to suffice, to be enough/sufficient”. So you cannot use it in conjunction with haben. And you can’t use wir as a subject either because in the original sentence it’s not we who are enough but rather we have had enough of something. So you would have to say: Es reicht uns. “It is enough for us.”
I’m not sure if Duolingo accepts that as a solution. I guess a point can be made that “es reicht uns” adds an “it” (i.e. it’s more akin to “we’ve had enough of it”; in fact it can even be used in the same “we have had enough of your shenanigans” sense as the English sentence). But in my eyes it’s definitely close enough to at least suggest it to the course contributors if the sentence comes up again.
You can't contract the verb here: "We have enough." (enough ice cream maybe). Or if "Wir haben genug" is meant in it's more figurative sense: "We've had enough."
This latter one is an example of what is sometimes referred to as "resultative perfect", i.e. present perfect used to describe a state which in of itself presupposes something in the past that led up to this point. In German a few of these are percieved as present tense because the action may still be ongoing. "We've had enough" implies that you are getting more and more of something, so much that you are sick of it by now. Another example is "we have lived here for four years", where "we" are still living at that place. In German we think of this as present as well: "Wir wohnen hier seit vier Jahren."