Geolocation in the browser stops tracking when screen goes blank. This makes it impossible to create apps like RunKeeper and Endomondo with a web app.
NFC, accelerometer, BT are examples of common hardware that is inaccessible in a web app.

With tools like PhoneGap you can create a web app and then port it to "native" code. (At the moment) You don't get the full control and speed that a native app can give you, but access to camera, contacts and other things like that are all possible via PhoneGap's JavaScript API.

I know this isn't a "reason to choose native apps over web apps" but the fact that doing it this way can remove some of the reasons that people might have for going against a web app.

The fact that the web is open, including the front-end code, is the reason that I was able to become a developer. I also don't see the point, as things such as Chrome's developer tools would become useless, making a developer's life harder. What exactly needs protecting on the front-end?

source-code secrecy - I really disagree with this one, if you compile your code, allow to download and install it on your own device it's still vulnerable to disassembling so in any case if you have some business logic that is sensitive NEVER put it on a client anyways. Anything else but business logic is just not worth keeping as a secret IMO

@bytasv source-code secrecy, there is big difference when you are looking on source code and compiled dissassembed code (assembler in most cases). It is very easy to modify java script. it is not so easy to do the same with assember.