OK, there are three things to consider here, all of which are separate - interrelated - concepts
Session
A session is a representation (for lack of a better word) on the ColdFusion server which reflects a current visitor to the site. Because the CF server and the client browser don't communicate with each other directly, the CF server relies on the CFID/CFTOKEN (or JSESSIONID) cookies to be passed from client to web server to CF server. Then CF can associate its session to the client's session.
Session Scope
As part of the above session, a session scope is availed to CFML code. The session scope is not "the session", it is something that exists as a result of a session existing. Once a session expires, the session scope for that session will be cleaned up too.
Session even handlers
When a session starts, one of the things it does it raise an "session start" event, which the CF application framework will listen for, and if an onSessionStart() handler is present, it'll run said event handler. This does not start the session, it runs as a side-effect of the session starting.
Similarly there is a session end event, and an onSessionEnd() handler.
Now... clearing the session scope does not expire a session. Running onSessionEnd() doesn't end the session any more than running onSessionStart() starts a session. Think of it in terms of mouse events: running the onClick() event handler manually does not cause the physical mouse button to depress, does it? No. Same with CF application framework event handler functions. Just because the framework runs those event handlers when events occur does not mean manually running those handlers causes the events to occur.
Also clearing the session cookies will likewise not end a session, all it will do is kill the association between the browser and an existing CF session on the server. On the next request the CF server will not find the cookies, go "ooh... new session..." and start a new session, and send new cookies to the browser. However as its lost its association between the browser and the previous session, it doesn't have any way of knowing that it should end that previous session. So that session will linger until the session time out occurs, at which point CF will terminate the session, raise the "session end" event, and the application framework will run the "onSessionEnd()" event handler if one is present.
If you want to actually kill a session, you will need to run sessionRotate() (or possibly sessionInvalidate() might work). I've never used these so don't know if they kill the previous session, or simply give the client a new set of cookies. These functions are new to CF10. If you have an earlier version, you're gonna have to mess with the SessionTracker (which you can google).
Make sense?
--
Adam