We've been having trouble with our DS too. Although he's not allergic to milk, he absolutely refuses to ingest any milk or milk products. He was doing similar things to your LO and was dropping further and further on the growth charts until he was down to the 7th percentile
In the past month, he gained 2 kg (2.2 lbs)! Here's what we did:
1) Changed what he was eating for breakfast. Before, he was eating mostly fruit and it wasn't enough calories. Imagine if you just ate an apple for a meal, wouldn't you be starving a short while later? DS was, so he was snacking and then avoiding eating at meals. We now offer him waffles for breakfast or meat (ham, pieces of chicken, even bacon!) and then he gets his fruit.
2) We cut down on the snacking. DS was filling up on snacks and then not eating enough at meals. He now gets 3 snacks a day: morning, afternoon, before bed (this last snack is a great way to pack in some extra calories in the day). We try to make his snacks a little heartier - muffins, dried fruit (more calories than regular fruit), etc.
3) At mealtimes, I noticed that sometimes when he said he was done and wanted out of his chair, he was actually thirsty. I find that offering him sips of his drink (rice milk) during his meal helps him eat more. Also, sometimes when he starts saying he's done, he's just tired/frustrated of feeding himself so I take over.
4) Pack in the calories whenever you can. I know most people disagree on giving kids juice, but in our case, it was a great way to pack in extra calories. Look for 100% pure juices, not the sugary kinds, and offer them after he's done eating his meal.
5) Vitamin/mineral supplements. Talk to your doctor about this one before trying it. My DS wasn't getting enough calcium in his diet because of his refusal to consume milk. My Dr recommended a calcium supplement because she said that sometimes when the body isn't getting the vitamins/minerals it needs, it's hard to put on weight in a healthy way.
Good luck! I hope some of these suggestions help you, or at least I hope it helps to know that someone has BTDT