"I had a dream last night."
The function of 了 here is not to establish a past event, but to indicate a change of my status (no dream → dream).
It would be easier to see why it should be there with a present or future sentence.
e.g. 他现在长大 He grows up now (doesn't make much sense)
他现在长大了 He has grown up now (not grown up → grown up)