Google documentation for <uses-feature>
itself clearly states:
Google Play uses the <uses-feature>
elements declared in your app
manifest to filter your app from devices that do not meet its hardware
and software feature requirements.
By specifying the features that your application requires, you enable
Google Play to present your application only to users whose devices
meet the application's feature requirements, rather than presenting it
to all users.
Some permissions in Android are connected to some hardware/software features of a device, like CAMERA. Since every Android device in the market differs in its hardware and software configuration, there's a greater possibility that some feature that you're trying to add in your app doesn't support all Android Devices. If you try to use the camera in a camera-less device (a superficial assumption), then your app will not behave as you expect.
In short, if you want your app to only be available for the set of devices having that particular capability, then you can add <uses-feature>
tag inside the manifest with the desired capability.
This is just for filtering apps in Play Store based on device configuration and support.
You can define zero or more <uses-feature>
capabilities based on your need.
Note: If you don't want your app to get filtered out just for the sake of a feature that doesn't impact the overall user experience of the app, you can smartly disable the particular feature if it's not available in your app.
For that, you have to write
<uses-feature android:name="YOUR_NON_COMPULSORY_FEATURE" android:required="false" />
For example, if your app uses CAMERA feature, but your app is not dependent on that feature, you can disable just the CAMERA feature to provide a non-buggy user experience.