Arch4ngel - do you have any evidence to back up the claim of only 25 users can have a session at any one time? Can't say I've ever come across this limitation but would love to be enlightened.....
A session is a server side storage mechanism - it in itself doesn't have any threads it will be accessed from the calling process' thread. Certainly there are know and well documented issues about storing STA COM components in a Session but that is more of a limitiation of COM and doesn't impact the general use of sessions.
Sessions can be a large memory drain if used incorrectly (by default they live for 20 minutes after a user has finished with them), but correct use of sessions and deliberately releasing objects that are no longer required can offset a lot of these problems.
Given the above memory limits I personally see no problem with using sessions to pass DataSets / DataTables between pages etc.
A deadlock is a condition were two threads are each trying to lock a resource already locked by the other and prevent either gaining the required resource, not really the situation described here. If threading andsession access is required then the Session object does provide a thread-safe method of accessing via it's SyncRoot property.
Also static members of a class behave more like application variables and are shared between sessions - not specific to each session.