The interactive rebase command was originally designed to handle individual patch series. As such, it makes sense to exclude merge commits from the todo list, as the developer may have merged the then-current master while working on the branch, only to rebase all the commits onto master eventually (skipping the merge commits).
You can actually do an empty rebase with:
git rebase --interactive HEAD
Now, just paste in additional hashes that you want to pick:
pick 1efd396b * Fixed a bug in frob function
pick f01934db * Awesome feature added
pick 6fd109c1 * Refactored the widgets layer
squash 3900fd77 * Refactored the widgets layer s'more
To produce the pick lists for this method, use git log --oneline --reverse from..to, then trim the output needed and prepend the rebase commands to each line: pick, squash