Apps are subject to certain restrictions, so there are concrete instances of when Apps are not a valid choice for your solution. Here are the limitations I am aware of regarding SharePoint Apps:
- You cannot use any non-declarative code other than JavaScript. So if you need to use the Managed Client Object Model for your solution, you cannot use a SharePoint App.
- If the deployment in question is on-premises, your infrastructure needs to be able to support the required DNS infrastructure.
- Your App webs cannot use Kerberos. Because of the use of dynamic DNS naming of App Webs the ability to create SPNs for use with Kerberos becomes unmanageable. If for some reason you solution requires Kerberos, you are not likely to get it working in an App deployment.
- Apps are subject to the restriction of using the JS Client OM or REST. So the same restrictions apply to Apps that apply to using any sort of JSOM/REST-based solution. For example, you cannot interact with the User Profile Service in any form other than read only with the exception of the user's profile picture.
- If you are using BCS, you can only use OData connections in the App model.
Under what circumstances would you want to use SharePoint Apps? Many of these have been mentioned by Robert Lindgren and I won't repeat them all here.
- If you have an external web application that you would like to take advantage of or you have skills in non-.NET language you wish to take advantage of, you should consider a provider-hosted app model.
- If you are concerned about reliability and scalability of your solutions. Autohosted apps should be considered if your project would require that each instance of the app have its own isolated backend web application or data store.
- If you have very specific requirements regarding security, you should consider the App model. Apps have their own security model for authentication and authorization that differs from the normal SharePoint security model.
Apps for SharePoint have permissions just as users and groups do. This
enables an app to have a set of permissions that are different from
the permissions of the user who is executing the app.
You must
request, in the app manifest file, the permissions that an app needs
to run. The user who adds the app must grant these requests, and the
user can only grant permissions that he or she has as a user. The
grant must be for all the requested permissions or none of them to
simplify the management of permissions for users and developers. (The
app principal always has full control rights to the app web, so it
only needs to request permissions to SharePoint resources in the host
web or other locations outside the app web.)
From Important aspects of the app for SharePoint architecture and development landscape
While many of the reasons you might might actually choose to use or not to use an App are opinion based, there are some concrete issues that need to be taken into consideration regarding the limitations of the App model itself, maintainability of the application, and your requirements regarding security.