It's better to sum each count separately and subtract the sum of eat_count from the sum of m.count.
The tricky part of your requirement is having dynamic keys. This isn't something Cypher can currently due (Stefan's query would have a literal "label" key).
You could have the label as a property, but not as a key, and collect those:
MATCH (n:Node)-[:HAS]->(x)
WITH n, labels(x)[0] as label, sum(x.count) - sum(x.eat_count) as left
RETURN collect({label:label, left:left}) as result
With APOC you have some more options for getting the keys set accordingly:
MATCH (n:Node)-[:HAS]->(x)
WITH n, labels(x)[0] as label, sum(x.count) - sum(x.eat_count) as left
RETURN apoc.map.fromPairs(collect([label, left])) as result
Okay, so with your changes the query will be a bit more challenging, as we will need a CASE to property negate the count when the type is eaten.
MATCH (n:Node)-[:HAS]->(x)
WITH n, labels(x)[0] as label, x.type as type, sum(x.count) as count
WITH n, label, sum(CASE WHEN type = 'eaten' THEN -1 * count ELSE count END) as left
RETURN n, collect({label:label, left:left}) as result
And with APOC:
MATCH (n:Node)-[:HAS]->(x)
WITH n, labels(x)[0] as label, x.type as type, sum(x.count) as count
WITH n, label, sum(CASE WHEN type = 'eaten' THEN -1 * count ELSE count END) as left
RETURN n, apoc.map.fromPairs(collect([label, left])) as result