A variant of maximum matching: disjunctive constraints on the endpoints' degrees of edges in matching
The case of trees and a constant $c$ seems to admit a straightforward dynamic programming algorithm.

You root your tree arbitrarily. You will start from the leaf nodes and propagate information towards the root. You will keep track of the following pieces of information for each subtree; here $u$ is a node and $T(u)$ is the subtree rooted at $u$:


$M_1(u)$ = best matching in $T(u)$ if $u$ has unlimited capacity,
$M_2(u)$ = best matching in $T(u)$ if $u$ has capacity $c - 1$,
$M_3(u)$ = best matching in $T(u)$ if $u$ has capacity $c$.


Note that $M_1(u)$ and $M_2(u)$ can be extended by adding the edge $(v,u)$, where $v$ is the parent of $u$.

All of these values are trivial to compute for a leaf node. Once you have computed these values for all subtrees of a node $v$, you can compute them for $v$; let $C$ consist of the children of $v$:


$M_1(v)$: For each $u \in C$ of $v$ we take either $M_2(u) + (v,u)$ or $M_3(u)$, whichever is better.
$M_2(v)$: We check all subsets $S \subseteq C$ of size at most $c - 2$. For each child $u \in S$ we take $M_1(u) + (v,u)$ or $M_2(u) + (v,u)$, whichever is better. For each child $u \notin S$ we take $M_1(u)$, $M_2(u)$, or $M_3(u)$, whichever is best.
$M_3(v)$: Similar to $M_2(v)$, but we consider subsets of size at most $c - 1$.


Everything is polynomial if $c$ is a constant.