I just voted to close a Stack Overflow question with a custom "off topic" reason. I was surprised to see an auto-posted comment appear beneath the question.
Why is a custom close reason treated differently to other close reasons?
Showing it as a comment helps relay to other users in the meantime why the question is being considered to be closed. Why not make that information directly available to the OP so that, perhaps, they can improve the question before it gets closed? Adding a comment to the post immediately notifies the user, while a single close vote does not (unless they are sitting on the question and hitting refresh).
Now, you might say, well why not do that in all cases? Because for a lot of the typical close reasons, that don't require a custom piece of text, there is already a well-established boundary of what those problems are, and I think they would just add a lot of noise to questions. If the problem with the question is an edge case that isn't already in the stock set of reasons, and you have to write something in to explain it, I see no benefit in holding off and hiding that custom text from the user until four others agree (it's also extra work - if you call clicks work - for other potential closers to find your reasoning and see if they agree with you).
Also the reason a duplicate does this is because it allows the OP to go look at the duplicate immediately and potentially solve their problem before 4 other people agree and the user is notified that there is a potential duplicate. If a question is being closed as "too broad" or "it's not clear what you're asking" they're not going to be able to solve the problem any quicker without two sets of interactions - they need to improve the question and then they still need to wait for answers.