Transaction fees already discourage spam.
Transactions are "free" for miners. They only pay in "available space", so they can include their own transaction, and not include someone else's transaction. But they can pretend they received a lot of transactions, it will be "free", because each miner can finally take all transaction fees in its own block.
Reducing the difficulty increases the block rate by the same proportion, so the blockchain will have the same amount of work divided among more blocks over the same period of time. It doesn't weaken the blockchain.
It weakens the blockchain a lot. The same problem is present in decentralized mining: if you have a single block header, then things are nice. But if you want to decentralize mining, then the question is: how many block headers are acceptable? We had a problem with including a lot of block headers on-chain, and your proposal is about including a lot of blocks on-chain. That will be too heavy. You need some limits, because if there are none, then what about 1 GB mempool? Or 1 TB mempool? Or 1 PB mempool? Or even more? You see the problem? Some CPU miner could artificially flood the network with a lot of transactions, and bring down the difficulty to one. That means going from ~2^80 to ~2^32 hashes per block.
The point of waiting for 6 confirmations is to give soft forks time to be worked out. It has nothing to do with security.
It is crucial for security. You can reduce the block time from 10 minutes to 30 seconds, as P2Pool did. And guess what: then you need 120 confirmations to get the same security. Any proposal that will decrease the block time, will also increase the number of needed confirmations. So, if the difficulty will be equal to one, then how many blocks you would need to replace "6 confirmations"? I guess 6*(2^80/2^32)=6*2^48. That means a lot of blocks. And then, block time will be 600/2^48 seconds. Quite short, I think there will be a lot of reorgs.
You just include in each block a list of hashes for the transactions in the miner's mempool that are not confirmed in the block, and include a Merkle root for that list in the block header. Nodes can then validate the list as they get the transaction data and confirm the miner's mempool size and difficulty reduction.
It works fine only for identical transactions. But each miner can include a different set of transactions, then everything is going to explode. And we had the same problem with decentralized mining: it can be simplified into block headers and transaction list, but only for repeated transactions, everything else has to be broadcasted, and there is no way to compress it nicely, because a lot of data can be random, like addresses and signatures.