I don't have the knowledge to answer 1 but I can answer the others.
2. It's often cited that if you don't include transaction fee the miners won't include the transaction for a long time and if you do include the fee it will get 1 confirmation every 10 minutes. How do miners "know" that transaction fee is included if they work on hashes of transactions?
A miner will get the entire transaction then check that its script is valid and follows all protocol rules. If its priority is high enough the hash of this transaction will be added to the list of transactions to be mined aka build merkle root.
3. How does pool mining work?
I understand that each individual miner is handed a piece of the puzzle to solve.
Each pool miner isn't a node in the network.
Pool software is a node in the network
There are many ways to do pool mining I'll give an intro to the stratum protocol as it's the most used.
With the stratum protocol each worker is given an ExtraNonce1, which is essentially the workers id each worker will have a different ExtraNonce1, and the size of ExtraNonce2, the number of bytes the worker can iterate. Example ExtraNonce1 "08000002" and ExtraNonce2 4. Each worker is also given enough information to build a unique block header: hash of previous block, coinbase1 script, coinbase2 script, list of merkle branches, block version, bits, and time.
Coinbase1 + ExtraNonce1 + ExtraNonce2 + coinbase2 = the coinbase transaction, this is the transaction where the miners reward goes to. The workers receive coinbase1 and coinbase2 they can not change it.
Once the the coinbase transaction is created it is combined with the merkle branches to create a merkle root. At this point the worker has all the components to create a header which can be worked on by incrementing the standard nonce.
02000000 Version
5655640000.... previous block
354685498b.... merkle root
50ff00ea time
f2b9441a bits
00000001 nonce ( this gets incremented )
Once the nonce runs out the worker increments ExtraNonce2 and creates a new coinbase transaction hash which leads to a new merkle root which means the nonce can be started at 0 again.
4. When you are mining you are combining transactions + nonce to create the winning hash, but transactions are constantly flowing in. How is that handled?
Most pools will add new transactions to be worked on every 30 seconds.