Hide node if user has viewed it
You can with Flag + Rules

In /admin/structure/flags/add add flag of "Content" and call it something like "use coupon" flag. 

I presume your Nodes teasers are listed in view. So in Views:


In Relationships add "Content flag"


Uncheck include only flagged content
Flag: Slect your flag
By: Current User 






In Filter Criteria add "Flagging" and select not flagged.


To prevent from viewing node directly by typing the url, in Rules: 


In /admin/config/workflow/rules create Rule with action of "Flagging is viewed".
Add Action of "Page redirect" and send them to some custom /url that says you already redeemed this coupon. (Create a basic page for this)