1. Allow models to be stored server-side and distributed on join. Models are only a few kb each (<=5kb generally)
2. Make a cleaner solution to server-side weapons, I don't much like the current solution so how about allowing the server to actually send the new stats to the client
3. Similar to 2. – full player data as well. Allow modifications like health, etc
4. Variable map size
5. Variable player count (above 32)
6. Variable team count (0<teams<(player count+1))
7. This one is a bit extreme, but here goes – allow server to issue client-side modifications with a binary diff (light weight). The advantage of this is that client updates are VERY easy – when a player connects to the server version 0.X can be applied without explicit redownload. The disadvantage is that there needs to be a compressed version of the vanilla code to make it easier to apply legit updates as opposed to server updates, well either that or save all the diffs so you can reverse them to derive the vanilla. Also we would probably want to allow players to cache the different version to allow faster loading.
8. Since I just said 7., I'm going to say that maps should be cached and updated via diffs. If I drop from a server then reload 20 seconds later I should not have to reload completely. I propose this works by having the vanilla map be sent by the server to the client (if the client doesn't already have a copy of the map). The server then sends (yup you guessed it) a diff, which is significantly smaller. After that block updates are sent as normal. In addition to that the server will store the block place/breaks for the last few minutes; if a client disconnects then reconnects they simply tell the server what the last block update they recieved was, and the server sends them whatever they need to catch up. Depending on the size constraints the block actions could be recorded for the entire life of the server, so anyone rejoining at any time could quickly and easily have the map loaded.