Great question - we're working very closely with moto, in fact our team very actively contributes to the moto core on a regular basis.
The main differentiator is that moto is a Python library that mocks out / implements the AWS APIs, whereas we see LocalStack as a platform that aims to support the end-to-end development lifecycle for your cloud apps.
A lot of the work we do in LocalStack is to create a seamless dev experience in your local environment - providing local DNS integrations, persistence features, Lambda code mounting, CI integrations, transparent injection of "localhost" endpoints into AWS SDKs (e.g., for your Lambda functions), and much more. Also, today we already provide some fairly sophisticated integrations - e.g., our Athena API which allows you to run your SQL-like big data queries natively over the local S3 filesystem. This is out of scope for moto, but a big focus area for us.
Our aspiration is that you can take any (AWS) cloud app and deploy it natively to LocalStack - which is already the case in many scenarios, and improving on a daily basis.
Btw, we're currently working on revamping/polishing our docs with lots of more content and details - we'll push out an update to https://localstack.cloud/docs in the next couple of days!
https://github.com/spulec/moto