Choupo-Moting rose high to head in a corner and give Mainz a much-needed victory, only their second in the last nine games.
Frankfurt are now without a win in seven matches in all competitions and have slipped to 15th.
Freiburg briefly cut the deficit in the 78th through Mike Hanke but Stuttgart sealed their win in pouring rain with Werner notching his second goal.
Bayern Munich opened up a four-point gap at the top after easing past Augsburg 3-0 on Saturday, setting a league record with their 37th successive game without defeat.
Borussia Dortmund lost ground when they were stunned 2-1 by VfL Wolfsburg to stay second on 28, level with Bayer Leverkusen who beat Hamburg SV 5-3.