blocks.log contains all transactions which are the requests for changes on the state, and the state is built by sequential execution of all transactions from genesis block.
1) Snapshot only stores the latest state (sum of all changes occurred by execution of transactions) including created accounts, their permissions and keys, multi-index table, smart contract binaries etc, but its size is far smaller than blocks.
2) All transactions are stored in blocks.log, but there is no index for them, so you cannot find a specific transaction with its ID unless you know what exact block that transaction belongs to. history_plugin generated index information for transactions in state, so you could search for a transaction with its ID, but it was deprecated. (Not supported anymore) Snapshot feature was developed after the deprecation of history_plugin, so storing history_plugin data in snapshot was not implemented. Alternatively, state_history_plugin or others solutions are provided instead of history_plugin, but they are't stored in state, so snapshot will not have them either.
3) Snapshot has the information of all accounts already, so the list of accounts can be retrieved from it, if you know the right way. Refer to how eosio::chain::controller reads the state from snapshot. [link]