I had the exact same requirements, some products can, for different reasons, not be shipped at all.
I modified quiet a few things to make it happen, the key things are:
- first added a product custom field "no-ship". Available at backend only. Yes/No.
Every non-shipable product has this field set.
- then modified manual shipping method to check if one of the products in the cart has that no-ship field checked and if so, the weight is set to some high number, which will skip all manual shipping methods with a max. weight, leaving just the "pick up goods at shop" available ( which has no max weight set)...
Hope this gives you an idea.