It seems like you M-x package-installshould do what you want. If you have it installed helm, you will have a steering interface for searching and installing packages. Even without helmit, it can be called from any buffer, it supports narrowing, and if you have a steering wheel installed, it supports fuzzy matching.
M-x package-list-packages, , , package-install . C-s helm-occur, . , *Packages* f (package-menu-filter), . , package-list-packages, .