Best practice is to say an "application" is a collection of rulesets that contain at least one case type.
A Pega "component" makes more sense as being a collection of rulesets that do not contain case types.
That is, an "application" is something you use to create cases whereas a component tends to be "utility code".
Regarding component limitations, you cannot PegaUnitTest a component by itself -- you need an application to do that.
There are limitations to using components at application design time but you can easily work around them by temporarily adding a component-specified ruleset to the application's stack, save, then remove the redundant application-specified ruleset when no longer needed.