I had a neice like that once, and the more her parent/grandparents catered to her and hovered around like they were afraid she was going to starve, the worse she got.
I believed it was a matter of control.
Of course, I never offered my opinion until they asked me what I would do (because I used to be a nurse - closest thing to a doctor in their eyes).
I told them that at first I would take her to a doc to be sure she was healthy and if she was I would put her meal in front of her. If she chose to not eat it (and wanting to opt for other "better -crap" food) then that was her issue. She would have to wait for the next meal.
Tell her what the rules were going to be from then on out: Offer her a fair time limit - 1/2 hour (or whatever seems fair to your specifics) and if it wasn't eaten by then it is taken away. No fan fare, no arguing, just simple enforcement of the rule. Of course you wouldn't put down rocky mountain oysters or liver, but the stuff that you know she was eating before without a problem.
Let her know the next meal is at such and such a time and stick to that. No snacking in between either, because that will defeat your whole purpose.
If that meal isn't eaten within the prescribed time frame, then that meal is also taken away without anger, arguing or fanfare.
She will eat.
My SIL and in-laws chose to ignore the advice they seeked and instead fed her crap in between meals because they were afraid she was starving due to not eating her meals. The girl had them hook, line and sinker. Unfortunately she has grown into an extremely obese young woman.
One final thing - as for eating slow when dining out? use the same strategy, you don't wait for her to finish because then she is controlling the issue. Instead you tell her how long you will sit afterwards before asking the wait staff to take away her plate. No arguing, just simple rules with absolute follow through each and every time.
Good luck.