If you are using docker, then the answer by @spsiddarthan is ideal. If not, I would recommend you to try it out before reading the rest of this post.
But if, for whatsoever reason, using docker is not an option for you, you can use capistrano to accomplish what you want, but it will require some effort on your part:
Essentially you will have to implement a custom SCM adapter. The SCM adapter is the only part of capistrano that has a strong assumption about single repository. Assuming you are using Git, you can use a new feature: sparse-checkout to check out a single directory of a repo.
You can extend the Git SCM adapter to setup a sparsely populated git repo for each service in the clone_repo method.
With this setup, you will have a sparsely populated repository in your server for each of your service which will contain only the code for that service. The rest of the deployment process will only rely on this local repository. So you will be able to independently deploy and restart individual services.