It's a big question and I don't think I have a direct answer, but here are some considerations that have helped us shape our feature files. A lot of this comes down to preference and the specific needs of the project.
Feature files are not the same as user stories.
From this excellent article from Matt Wynne (author of The Cucumber Book):
When Aslak created Cucumber, he renamed the files from .story to .feature. This wasn’t an accident or an idle act of whimsy: it’s because there’s a difference.
User Stories are a planning tool. They exist until they’re implemented, and then they disappear, absorbed into the code.
Cucumber features are a communication tool. They describe how the system behaves today, so that if you need to check how it works, you don’t need to read code or go punching buttons on the live system. Organising your features according to the way they were planned and implemented is a distraction from this purpose.
Writing declarative feature files that are dense with business language might make your scenarios even more discoverable than a perfect directory structure
As you project grows (and more people start contributing), it becomes more and more difficult to just browse directly to a scenario's location. The next best thing? Searching for it. This is easier if you're scenarios are more declarative and less imperative. From this article from SauceLabs:
Tests should largely focus on what needs to be accomplished, not the details of how it is done. They should mostly be understandable when read by non-developers.
The great thing about compact scenarios written at a higher level of abstraction, is that you can fit more of them into a feature file before it starts to feel crowded. For system tests, we've had good luck pairing high-level gherkin with the page object pattern, because it provides a layer for all that detail to live.
Scenarios and features are easier to find if they use the same business language as the UI
If you have an action called "Remove" in the UI, "Delete" in the test, and "Archive" in the production code, it can be difficult for either developers or business people to find the scenarios associated with that action. It may be easier to search for the scenario if the test always follows the UI (assuming the average team member using your BDD tool is more familiar with the UI than the source code).