Joomla functionality is normally extended through extensions. New extensions are added to joomla by a simple installation process and they add new features. Their frontend layout code could be overridden through templates html override process.
There are primarily 4 types of extensions through which joomla could be extended.
Templates (through overrides)
These are the major Joomla applications as they comprise the main template content area of the site. Component pages are called through menus and only one component could be displayed on a page, at a time. A typical component functionality is managed through its backend. Through components, you can utilize the full power of Joomla and can create really powerful web applications. Some of these are only meant for backend and are not used at frontend, like backups related components including xcloner / akeeba backup etc.
Components are basically divided into two categories i.e, Native and third party. Native components are developed by joomla team and they come with core joomla installation while third party, as name indicates and developed by third party developers.
Some of the most used third party components are:
Akeeba Backup (used for backup purpose)
Community Builder (Community building and profiling)
JomSocial (Facebook Clone / Social community )
JomFish (Joomla language / translation )
DJ Classifieds (classifieds related component)
iSEO (onsite seo)
RSForm (creating forms)
OS Property (real estate management)
RS Firewall (site security and spam removal)
and much more . . .
Components could be enhanced through modules and plugins, which I will cover next.
Modules are chunks of code which are used to display specific content on specified position on the site. These positions are defined in template which is currently being in use. Some common modules used are:
Menus, login box, search bar, copyright text, news feed, latest articles, social sharing , twitter / facebook feed display etc.
Some modules are component specific and they only work with their respective components. For example, Show cart, search product related modules work with Virtumart, form display module works with RSForm, Recent ads work with DJClassifieds. A module is managed through backend.
These are the code that are executed seamlessly and trigger an event and they are also used to override existing code and thus change functionality. Whenever you make a search in Joomla, the search plugin determines that which articles have to be displayed on the basis of search term. Content related Plugins are used to prepare / transform content, like replacing specific text with a form. Plugin types and events are discussed in detail in the plugin development portion of the tutorial.
Templates are not commonly treated as extensions as normally they change the layout, not override the core functionality. But now a days, there are a lot of joomla templating frameworks, like helix, T3 etc. Their templates comes up with complete libraries and offer so much rather than just changing the layout. They also have some common builtin modules, to make your life easier. I am basically big fan of helix framework.
Joomla uses MVC framework, which separates layout and logic. So it is very easy to create a joomla template according to your requirements and give your site a new look. Troubleshooting is also very much easy, as you dont have to mess around with complex logic related code. Different templates can be used on same site by using menu assignment feature.
Supporting multiple languages is a major feature of Joomla. A website in joomla can easily be made multilingual, to support different languages rather than just one. To support this functionality you have to create language pack for the respective language, which can then be installed and used on the site.