Utilize all your options
When it comes to the "best" option, there really isn't one that is going to be best in every case. It's mainly about picking the option that best fits the new feature you have, so technically, depending on the types of new features you release, you could utilize all of the methods you already listed, and should.
Is it an additional option to an existing action?
A popup would do the trick. Taking an example from Facebook, when a new feature was released for the status update, the popup was only shown when the user clicked to preform that action, keeping a clean user flow, instead of instantly showing the popup. The popup gave a brief description of the new feature, and provided options for the user to gain further knowledge on the feature by taking a tour, or view a page that lists all of the changes specifically, and of course, an option to ignore it.
Is it a whole new section/page that the user hasn't seen before?
A modal popup that dims the background and brings full attention to the message is what I'd suggest. You won't want the user coming back or venturing off into the unknown (to them) and getting stuck or confused, guide them immediately on all of the new steps and features added, or allow them to venture themselves, their choice.
Is it a feature that doesn't affect the users day-to-day tasks?
It may be too intrusive (like you mentioned) to keep nagging the user about all the new features every little second, you wouldn't want the user getting angry as a result of that. A solution would be to have a dedicated page that lists out all of the new features in a comfortable, readable way, and allow the user to explore those features if so desired. This conforms to the user, and allows them to make the decision without any forceful popups.
The page for the new features of El Capitan from Apple is a good example, it lists out all the features Mac already has (Calendar, Mail) and expands on all of the new ones in a very simple way. If your able to provide feature tours, include the links under each section so the user can learn more.
To avoid this page not being read or identified, a simple welcome message/alert box when they login, visit a page should suffice. Keep in mind the type of features you released as well, if you alert this message on the home view, and the features released have nothing to do with that section, it could cause confusion. Instead, only show the message to the sections the feature(s) relates to. Note the x icon on the alert for users to close the message out of view.
download bmml source – Wireframes created with Balsamiq Mockups