I spent some time digging into the map file (which was also a suggestion by @jonk), and it looks like function sizes are available in the file.
For anyone interested, if you look inside a map file (in this case a XC8 generated one)
Name Link Load Length Selector Space Scale text3 41 41 195 8 0
The length of text3 @ address 0x41 is 0x195 bytes in length.
Elsewhere in the map file, you'll find the symbol table and will find what function is linked to text3.
_foo_open text3 00041
When I compile program with foo_open() my program size is 1878 byes (0x756) and when I completely remove foo_open() my program size is 1472 bytes (0x5C0).
The difference between is 0x196. I am off by a 1 (not sure where/why) but I think this is close enough to what I am looking for.
So going even furthur into this, there is a section called MODULE INFORMATION, that tells you how big your module is, as well as each function.
Module Function Class Link Load Size foobar_driver.c _clear_bar CODE 0729 0000 7 _display CODE 0583 0000 21 _set_bar CODE 032A 0000 56 _set_foo CODE 02F3 0000 56 _turn_off CODE 0761 0000 5 _clear_foo CODE 0723 0000 7 _toggle CODE 05BD 0000 20