After some more profiling work [1] I've come to the conclusion that yes, the hot spot is in ip-text.lua [2], and that after that function, it's quite flat otherwise. The difference between ip-text.lua and the number two spot isn't quite as bad as I initially thought, although it took some post-processing to lump all the function calls together to determine that (required because Lua can't always know the “name” of a function, but with the line numbers they can be reconciled). It's only called about twice as much as the next most used function instead of the nearly 4½ times it appeared earlier.
As far as profiling “Project: Sippy-Cup [3]” is concerned, I think I'm about as far as I can go at this time. I did improve the performance [4] with some minor code changes and any more improvement will take significant resources. So I'm calling it good enough for now.
[2] https://github.com/spc476/LPeg-Parsers/blob/9ac0d6f338e1429c2e037bc510516b990576ac1d/ip-text.lua