If you want easy implementation for multiple platforms then you might want to use Ionic. If your app is platform specific then I believe you should go native since it is much powerful than html+js.
Most, if not all things you can do with native, you can do with Ionic as well.
Even for things like reading the acceloremeter you can use javascript.
For features not accessible through js, you can use a Cordova/PhoneGap plugin: push messages, Android toasts, native camera access, NFC access - you name it, there are hundreds of plugins available.
Writing one yourself is not difficult, either. I was just testing and created a plugin for Parse.com push messages.
Using plugins enables you to access device-specific features, yet keep the app runnable as a web app: just add some check in js to detect if we have plugins loaded or not – if not, skip the feature or use a fallback (like for toasts).