Typically, when we're using a KDF, we want the output to be uniform and indistinguishable from random, since we want the output to be able to be used as a symmetric key, which should be uniform and indistinguishable from random.
The reason why your construction is secure is that Keccak exhibits those properties. Most Merkle-Dåmgard functions that output more than 50% of their state size are vulnerable to length-extension attacks, which means they're actually distinguishable from random. That's why HMAC exists: because it isn't vulnerable to those attacks, and it has some nice provable properties involving how its security reduces to that of the compression function.
The main advantages to using a standard KDF, such as HKDF, or a similar design, are two-fold. First, you can rely on any sort of proofs or security reduction for this purpose that the construction exhibits. For example, HMAC-SHA-512/256 requires less security from the hash function than just using SHA-512/256, so if there's an attack, you may get more time to move to a more secure design.
Second, it is much easier to audit and explain your design if you say, "I'm using HKDF with SHA-3-256" and your auditor says, "Yup, looks like you are," rather than a custom design. This may sound like a trivial feature, but it is really important in many regulated industries or government agencies, where things like FIPS, PCI, or other requirements come up. Customers also like designs their security teams understand and approve.
HKDF doesn't reduce security in this case because even if you use the extract step, which you don't need and can skip (because your input is uniform), it reduces down to a 256-bit secret (assuming you're using a 256-bit hash function), which is no better or worse than your 256-bit input.
Both variants of BLAKE2 are also secure in this context, just like Keccak would be, because they exhibit the same properties. You could also use KMAC or keyed BLAKE2b in the place of HMAC in HKDF if you wanted, which would also be fine (and would likely have similar provable security properties).
Truncating the output of Keccak256 is also secure. Remember, we want our output to be uniform and indistinguishable from random (so it will pass the next-bit test just like a CSPRNG), so any portion of it is equally acceptable. The first portion is customary. Of course, if your entropy input is only 128-bit, then the security of the output will only be 128 bits.