Looks good to me. Only thing I see is here:
data-theme-color="{{ settings.color_id }}"
Should look something like this in my experience:
data-theme-color="{{ block.settings.color_id }}"
Anytime you reference an App Block setting you just need block in front of it.
As to your second question, we’ve had success having our React App living in a separate folder outside of the extensions folder (Shopify is very picky on its structure) and creating an npm command to compile and push the bundled app to the appropriate locations inside of the extensions folder.
Then just continue to add other Liquid blocks as you see fit and need. Just be aware that for App Extensions, Shopify has a limit of 10MB for Liquid files across the whole extensions folder.