Reversible Merge of Integer Hash Values
A simple approach is to use the sum of hashes, e.g., 

$$\begin{align*}
\text{combine}(X) &amp;= \sum_{x \in X} H(x)\\
\text{separate}(y,x) &amp;= s - H(x)
\end{align*}$$

where $H(\cdot)$ is some good hash function.  To make the result suitable as a hash, I recommend that you hash the output of combine one more time before using it as a hash value.

More generally, you can use any commutative hash function.  See, e.g., https://crypto.stackexchange.com/q/6497/351 and https://crypto.stackexchange.com/q/11420/351 and https://crypto.stackexchange.com/q/54544/351 and Which fingerprinting/hashing algorithms support compounding?.

Another approach is to use a Merkle hash tree.  Store the list of children in a Merkle hash tree, one mini Merkle hash tree per node of your tree (i.e., a binary tree whose leaves are the children of the node, and where each internal node is augmented with the hash of the values in its two children, and the value in the root of hte Merkle tree is the hash of that node of your tree).  This allows $O(\lg n)$ updates rather than $O(1)$ updates, but that might be good enough.