Couldn't you merge the features that are done to your staging branch and from there merge to production? Your staging branch would be the 'release branch' in this model: http://nvie.com/posts/a-successful-git-branching-model/
We have a similar process it allows for more releases. imo there are things that require more testing then others, and they shouldn't hold up the process of releasing code.
We merge feature into dev when we want to show a feature to a fellow developer.
We merge feature into staging when a feature is ready to be tested by non-developers and to be included in documentation.
We merge feature into production when it's ready for all users.
Has been working out well so far.