Hi Sjoerd,
To say that the variation of one tensor implicitly depends on another is handled by the function ImplicitTensorDepQ. You have to do some of this by hand. This could perhaps be automated with a function which would check index structure, etc., but at the moment here's how to do it.
Let's say I have v[a], w[a], and T[a,b], and I want to set δw[b]/δv[a] = T[-a, b]. Then I would write
w /: ImplicitTensorDepQ[w, v] = True
to say that w depends implicitly on v (and associate this assignment with the symbol w). This much means that VarD will leave unevaluated expressions like
VarD[v[a], covd ][ w[b], rest]
It might be useful to look at the code for VarD to see why there is a "rest" argument in VarD—that's how it implements the Leibniz rule. To give a value to this variation, you would write
VarD[v[a_], cd_][w[b_], rest_] := T[-a, b] rest
VarD will take care of being linear over sums and scalars, integrating by parts, and changing derivatives. You only need the two assignments above.
Best
Leo