AEM provides various mechanisms to enable you to customize the consoles (and the page authoring functionality) of your authoring instance (touch-optimized UI).
Clientlibs allow you to extend the default implementation to realise new functionality, while reusing the standard functions, objects and methods. When customizing, you can create your own clientlib under /apps; for example to hold the code required for your custom component.
Overlays are based on node definitions and allow you to overlay the standard functionality (in /libs) with your own customized functionality (in /apps). When creating an overlay a 1:1 copy of the original is not required, as the sling resource merger allows for inheritance.