Proving formula for derivative of Kleene star
Using structural induction seems like overkill, or, which is more likely in your case, overly formal in a way which complete obstructs what is going on.

Here is a simple proof that explains why $\partial_a(r^*) = \partial_a(r)r^*$. We consider two cases:


$\epsilon \notin L[r]$. This implies that $\partial_a(r^{n+1}) = \partial_a(r)r^n$. Since $\partial_a(\epsilon) = \emptyset$, we get
$$
\partial_a(r^*) = \bigcup_{n \geq 0} \partial_a(r^n) = \bigcup_{n \geq 1} \partial_a(r)r^{n-1} = \partial_a(r) \bigcup_{n \geq 1} r^{n-1} = \partial_a(r) r^*.
$$
$\epsilon \in L[r]$. Write $r = \epsilon + s$, where $\epsilon \notin L[s]$. Then $r^* = s^*$, and so using the preceding case applied to $s$, we get
$$
\partial_a(r^*) = \partial_a(s^*) = \partial_a(s)s^* = \partial_a(r)r^*,
$$
since $\partial_a(r) = \partial_a(\epsilon) \cup \partial_a(s) = \partial_a(s)$.




If you did want to use a proof by structural induction, then you would need to let us know what identities of the Brzozowski derivative and of regular expressions you are allowed to use.

For example, if you are allowed to use $\partial_a(L_1 \cup L_2) = \partial_a(L_1) \cup \partial_a(L_2)$, then you immediately get the inductive step for union.

As another example, for the base case $r = b$, you can use the fact that every word in $b^*$ is either empty or starts with a $b$, and consequently $\partial_a(b^*) = \emptyset$. Since also $\partial_a(b) = \emptyset$, you would deduce this base case. Perhaps the identities you are allowed to use can implement this argument.