There is a school of thought in psychology that says kids focus very intently on different things as they grow older. During the toddler years, kids are working really hard to learn how their own body works - they graduate from being fascinated by their own fist, to learning what it feels like when they have to pee, when they are tired, how to make a boo-boo stop hurting, etc. Chances are, the OP's 3-year-old son is still having to put a lot more thought into figuring out what his body is telling him - hence "poo-poo" and "pee-pee" are on his mind a lot.
Another phase (and partially overlapping, age-wise, from 2 to 6 or so) is learning how to interact with other people, and seeing what the child can do that will cause other people to react. Babies figure out quickly that crying will bring a parent, but learning how to interact with siblings, adults, and other children can be a lot slower. "Stinky" (and getting attention when coming across "rhyming game" words that draw a reaction) is one way to do this. OP's son has probably gotten a reaction out of OP or another adult with using the word "stinky" and finds it exciting to be able to do that, so he uses it more.
My parents always steered us toward less incorrect words - when my sister overheard dad say "dingdangity!" once and happily used "dam dam dam dam!" for a few days, mom suggested they learn the word "Fiddlesticks!" instead, because it was more fun to say. My sister agreed, so she would yell "Fiddowstink!" when she was frustrated (at least, until her vocabulary got better).