I have been trying the same thing, and it is very frustrating. The callbacks do not seem to fire when I attach them to an imported app instance.
For what it’s worth, the slapdash boilerplate project separates callbacks into their own file, but requires that the Dash project be installed as a Python package.
It would be really nice if the Dash guide could document how to organize files in a cleaner way than putting everything into a single file.
This question was raised again in a different thread, and will hopefully be addressed soon.