Well, I'd be glad that it isn't poop to start with! ;-)
This really isn't *your* problem, it is *his,* and thus *he* needs to choose to change it. Now you can set up the conditions to make him more likely to change. But you have to let go of the concept that it is *your* problem.
Two of my kids went through similar issues (although it was poop--like I said, be grateful!). What worked for us was putting clean up responsibility solely in the child's hands. When we would notice that an accident had occurred, we immediately sent the child to get fresh clothes and then to the bathroom, and the child could not come out until the clothes had been changed, dirty ones rinsed and put in the laundry. We did not yell, shame, or show any upset. Just "oh, I see you had an accident. Well you need to clean up." In the case of *really* messy underpants that were too much for a 4 year old to clean...they got tossed in the trash.
And when the child was nearly ready to run out of underwear, off to "Stuff-mart" we went with allowance money--and at least one other sibling with allowance money. The "potty trained" sibling got to pick a toy out. The "accident prone" child was usually looking at other toys wanting to buy them, but I'd just say "I'm sorry, you need to use your allowance to buy underwear today. That toy sure looks fun though, maybe next time." Again, no shaming or scolding. No "well if you hadn't messed your pants so many times you could buy that toy." Because a 4 year old in our house only gets $.50 per week in allowance...we'd chip in *some*, but we'd make sure that about 8 weeks worth of allowance went toward an underwear purchase. We only had to make one trip to purchase underwear with each of the 2 kids we had this issue with.
Since you aren't dealing with poop, what you might do to replace to the "Stuff-mart" run would be to have your son put his soiled clothes in a specific basket, and when it is ready to wash, charge him for laundry washing services.
Good luck!