i.e. the whole SQL engine is directly embedded within the application itself: a complete database simply is an ordinary file which can be freely copied and transferred from one computer/OS to a different one without any special precaution.
SpatiaLite extends SQLite's existing spatial support to cover the OGC's SFS specification.
[2] It isn't necessary to use SpatiaLite to manage spatial data in SQLite, which has its own implementation of R-tree indexes and geometry types.
But SpatiaLite is needed for advanced spatial queries and to support multiple map projections.
As it is a single binary file, SpatiaLite is also used as a GIS vector format to exchange geospatial data.