Just tell her that, from now on, your maximum waiting time is 10 minutes unless she texts/phones you with a VERY good reason for further delay (motorway closure, broken down train, that sort of thing). And, if she's more than 10 minutes late - leave. Her behaviour is inconsiderate and rude but perhaps she hasn't yet realised just how much it aggravates you because you've laughed it off. She needs a wake up call and, if she really is a good friend, she'll get over it and mend her ways.
My friend (ex-boss but we bonded early on and became very close) is always, ALWAYS late. Usually by about half an hour so it's not a minute or two. I don't mind if she's coming over to my house (although on those occasions it's often longer than half an hour) but when I'm waiting outside a shop or pre-arranged meeting place, having texted her an hour before to confirm the time, she is STILL late. I'm using caps as you can see meaning I am VERY irate. I've tried arriving late myself but I just can't make myself do it. I pointedly look at my watch and we've laughed (me, rather drily) about her lack of punctuality before but it hasn't made any difference.