C.M.
I don't know what people SHOULD do, but I would have walked over there, removed the plant stalk from the boy's hand (so it wasn't a danger anymore) and then made sure my son was okay. I would want to know if he was actually hurt or just upset. Then I would have gently said to the 3 year old "We don't put plants in other people's faces because they could get hurt."
Then I would have encouraged them both to find something else to do.
Both kids are young and they need a lot of supervision and redirection. There really isn't much your son could have done to be more "assertive" except walk away and come get you. When the kids get older I always encourage them to tell other kids to stop doing whatever they are doing that is hurting them, but since both boys are so young they just need a parental eye and help handling these issues.
IMHO