Oh dear, I know how hard it it.
My eldest was never a good sleeper. He always woke by 5am. At your son's age, he would wake up in the night - I would just bring him into our bed when he did. When he got a bit older, he'd come to our bed himself which had the benefit of waking me up less completely.
You don't want to hear this, but that went on (gradually decreasing) until he was about 5. It wasn't until he was nearly 6 that he stopped waking up at 4 - 5 am, now it is 6 - 6.30 which is much better and he falls asleep at 7pm every night and sleeps through except on the rare occasion he has a bad dream. I think it was a physiological change in his body, not anything we did/didn't do - he just has a very set body clock and it used to wake him up more.
I think some children are just like that. DS2 was a bad sleeper until he was 2, but now at 4 he sleeps 7 - 6 (and would sleep longer if DS1 didn't crash around and wake him up) - he doesn't have DS1's 'eyes blink open and immediately wide awake' setting, he can wake up, roll over and go back to sleep (like DH).
DD is only 2 and comes into our bed most nights. I am hoping that will improve soon as I am knackered after more than 6 years of broken sleep!
Mine would just have got too upset with being 'forced' to stay in bed, so we just did gentle encouragement. I did reward charts too, but didn't find they were that successful - they would rather see me than get a sticker!
Perhaps if I were to have DC4 I would go the tough route!