If you want really decent sound your best off using an external mic - with a tascam audio recorder or something but thats going to be 3-4 times the size of the go pro.
You can buy plenty of generic go pro mics which will sound better but not great, they are all designed to be small - defo better than built in - but you have to set your expectations realistically
External batteries - again, as big or as small as you like - I use go pros mostly for static recording so have no issue with a 20000mah brick sized battery powering it, but I use external recorders for audio and just let the go pro record audio as normal then sync with higher quality sound.
It all depends on WHERE AND HOW you will use the go pro.
Another option is - if the go pro will be within arms reach of you is, again a sound recorder with a high quality lav mic on your collar - this will pick up general audio well and also if u want to talk in the video it will produce good quality audio - this is the most 'mobile' option - but its really only aimed at vloggers who are talking on camera.
My vlog setup is the lavalier microphone plugged into a Tascam DR-05 - my camera is either go pro or Sony NEX 5R - and I have a metal mount bar the sony sits on with a Tascam DR-05 on that ALSO and SMX-10 Mic (have it layin around and its good quality mic)
So when I go to edit I sync the camera with the TWO audio recorders then just choose which has the best audio quality for that situation.
Depends on how much trouble you want to go to - its annoying the Sony / go pro doesnt have proper mic support, but, with the audio recorders I can record 16 or 24bit wav files with very high quality and no hiss at all - just pure quality audio.