Since most sources (especially the older ones) don't have running shop server threads to migrate into (which, isn't even entirely necessary, but it's how Nexon does it), you don't have to disconnect the socket from the current session on exit because it's still attached to the game server. If you were connected to a separate shop server (which is how Lithium handles it), then you would handle when a user clicks the Exit button by disconnecting them and re-migrating them back to the game.
Unless you were going to implement the Cash Shop using a separate shop server thread, the best way to work around it is by just going to the ChangeMapHandler (src/net/sf/odinms/channel/handlers/ChangeMapHandler) and find a check regarding slea.available() == 0. Below it should be calling some like c.disconnect() method or something, just comment that out so it keeps your session within the current port and returns you back to the map.