You need to "cue" your child.
Its great he is self-reliant and can entertain himself in his room, before bed. Many kids that age can't. So that is the upside to it. And be glad he can do that.
But since he is only 3 years old... he cannot like an older child, just "stop" according to a clock nor even know how long time has passed. Nor can he even tell time at this age. To a kid this age, 1 hour can seem like 5 minutes.
So, as the parent, you need to "cue" him. After he has done his "routine" of playing by himself in his room prior to bed and actually falling asleep... YOU need to tell him "5 minutes sweetie, then put away and sleep time..." Give him a head's up. Then, after you feel it has been long enough.... go in and Prompt him and perhaps help him put away, and get into bed. Tell him that is all, in a nice calm voice. Not an irked voice. Then allow him to put away or just to hop into bed. You need to HELP him transition and stop playing (and compliment him that he played by himself well, you're proud of him, but now it is sleep time), then stay there and let him hop into bed and get comfy. Then say good night and leave the room.
If you let a child just "play" on and on and on... on their own, they don't know ON their own, "when" to stop. He is only 3. At this age they don't even have full "impulse-control" fully developed yet. So YOU need to "cue" him... when to hop into bed.
Teach him, there is a start time, a play time next, then a finish up time & "conclusion" to everything. Going full-circle. If you use this repeatedly in a pleasant way... cuing the child, they will learn. It takes practice. So allow him to get used to the "routine" and pattern of his going to bed SEQUENCE. And him getting used to this pattern. And then in time... all you need to say is "okay, full-circle... time to hop into bed." Instead of saying "GO to bed..." which is more confrontational.
So, its not a "bad" habit HE did... he is just playing by himself in his room before bed like you tell him. And he IS able to do that. When most 3 year olds can't. So praise him for that. BUT then YOU need to then "cue" him and let him know what the next step is, and that play-time in his room is completed, full-circle, and that its time to HOP into bed. And be sure to tuck him in... so he feels positive about it.
There is nothing wrong with him playing in his room by himself before bed... but you need to start the routine earlier... so he does not end up falling asleep at 10:00.
My son is so self-reliant too...and he likes to play his Leapster before bed... I let him and it winds-him down... but then after a certain time, I "cue" him and tell him the next step, which is going to bed and getting tucked in. My son does not battle about it either. But he knows the "routine"... and its fine.
All the best,
Susan