Ember components allow for the creation of reusable UI elements by encapsulating HTML, CSS, and JavaScript. Components can have actions, templates, parameters, and a pod structure for improved abstraction. Addons extend Ember functionality and can be created with ember-cli, published to NPM for use in other Ember applications.