I'll try my best to answer your questions:
1. Players are part of a channel. Channels contain a list of SavedRFCs (and SavedObjects). So when you send an RFC with XXXSaved this RFC is simply added to that player's channel's list of SavedRFCs (as seen in TNGameServer::ProcessForwardPacket(...)). When the server is shut down it calls TNGameServer::SaveTo(...) which iterates over all channels on the server, and, if the channel is marked as persistent, saves all RFCs and Objects to a file. Note that this save routine is also called every 2 minutes. When the server is started back up again, it simply reads and loads the file.
2. Yes, and you'd have the TNServerInstance hooked up to a remote lobby server somewhere, so other players can see it. This lobby server would be hosted by you, but the actual game server would be hosted by your players (in your scenario). If you want the host to control AI and spawning, just check TNManager.isHosting in your AI / spawn functions.
3. You're saying you want each player to store their statistics locally (such as their level, rank, inventory, whatever)? You'd have to add some custom logic for this, as by default the data is stored and loaded by the server. Perhaps you can have each player save their stats to a file locally, then whenever they join a channel have them forward the contents of this file to every player in the channel (Target.OthersSaved). There's lots of ways to deal with this, entirely dependent on your design / needs.
4. I don't have any experience with local split-screen. tno.isMine will always return true or false. Uhh, hmm, I might set up a custom object creation function that determines if it's a local player, and, if so, which local player, then save this to a variable in your Player script. Then check that where ever you'd check for tno.isMine (in addition to, not instead of). Another approach could be having a static LocalToNetManager that's passed inputs from each local player (again, with an ID) and forwards these via RFC. This approach might be easier, I think you could use tno.uid (which is handled by TNet when instantiating) instead of having to set a custom ID for local players.
5. I think there's some confusion here. If you're using the AutoSync script, there's no need to sync inputs, or vice versa. To answer your question though, you can send input updates very frequently, but be sure to test it thoroughly before release (there is such a thing as too much). Also, if you're syncing inputs, I wouldn't be syncing the transform very often at all. Maybe once every 5 seconds or so, just to correct any drift from missed packets.
edit: Yeah, 30 seconds was a silly suggestion. Changed to 5.