Extending a theme: build new features as plugin or core modules?

If you’re going to want to mix-and-match these modules, I would suggest developing them as plugins or using a plugin such as Code Snippets to separate your modules, making them easier to work on, expand upon, and deactivate/activate.

Either way, separating your modules from your theme will make customizing deployments faster while increasing the organization of your code.