This is a point that seems to cause a lot of confusion. The best way I can try to explain it:
Sora stabs himself, and both his heart, and Kairi's heart are pulled out of his body (I will get to Ven's heart in a minute).
Sora's body fades into darkness and that empty shell forms Roxas (who is just Sora's leftover body, without a heart). Ven's heart, however, stays with what WAS Sora's body, which is why Roxas' form resembles Ven and not Sora. (So, being extremely technical, Roxas was never really a 'true' nobody because he had a heart the whole time).
The process of both Sora and Kairi's hearts exiting Sora's body at the same time creates Namine, who is kind of a mix of the two of them--kind of a nobody, but kind of not.
Edit: To clarify, Kairi's heart leaving Sora's body created this funky situation where it triggered the creation of a Nobody. She looks like Kairi (kinda) because it was Kairi's heart that left his body, but she is connected to Sora because it was his body and his heart was there too. Which is why she can change his heart around but looks like Kairi. It is never really said, but I tend to think she has blonde hair and not red because of connected influence with Roxas/Ven but that's just my personal conjecture.
After this, Kairi's heart went back to her no problem.
Sora's heart (not having a body anymore, because Roxas), turned into a Heartless (the one we play as briefly). When he hugs Kairi, her love and desire to save him wakes his heart back up and helps him "remember" who he is. This gives his heart the appearance of being human again, but he is literally only a heart at this point. However, the fact that he retains himself, is the gift that Kairi gave him. She didn't actually give him a body. Or, at least, she didn't give him HIS body. An illusion of his body, that can obviously physically interact with stuff, but it's not a REAL body.
Edit: This is also why Namine calls Kairi, Sora's "light" because she is the one who always helps him remember who he is, and is kind of like his anchor. It's really cute and romantic. It is also a good way to show how both Kairi and Riku are important to Sora in different ways. Kairi tries to help him never forget himself saying things like (ソラã€å¤‰ã‚らãªã„ã§,ã--sora, don't ever change), and Riku has basically stepped into a guardian/teacher role trying to help keep him out of the darkness. Both equally important positions.
So, yes, TECHNICALLY Sora is only a heart with the illusion of having a body until Roxas joins back up with him. I think physically this happened at the start of KH2, in that Roxas let himself get absorbed or whatever but Roxas wasn't fully "all-in" on it until the final world of the game. Seeing Axel die kind of stirred him into action. Up until then I think he was sort of unsure about the whole thing, feeling it was unfair, etc, and the fusion wasn't really complete. Until Sora "faces" him in that final confrontation does he fully decide "okay, sure you can use my powers again" and gives it over. (this is why we unlock Final Form at this point). So at least by this point he is fully complete. I think the scene after the final boss with Roxas and Namine talking to Sora and Kairi was just having a final goodbye before going back in for the last time.
I wouldn't really call him a "heartless", as he was in control of himself just fine. But he WAS only a heart, all through the end of the game, and through chain of memories.
Also, the issues Roxas was having in Days was because of Xion, mostly, siphoning his strength away. They were also playing Keyblade tag for a while among them. That's why Xion let herself get absorbed by Roxas, so that they could both go back to Sora instead of feeding off of each other and pulling everything away from him.