I have a closed source project that is built on my open source framework. I want to know how I should structure my workflow. Below is my best guess using git with submodules
You can have a 'public' and 'private' branch in your local repository. When you push, each branch gets pushed to a separate remote repository (look up the 'git push' syntax). Then, you can freely merge from public to private.
I'm sure there's a way you could merge selected changes from private to public, too, though I'd have to look it up.