Theorem : If $K$ is a convex open set of $R^d$ and $v_0 \notin K$ , then $K$ and $v_0$ can be separated by a hyperplane . In the sense that there exist a non-zero linear functional $l$ and a real number $a$ , such that $$l(v_0)\ge a , \,\,\,\,\,\,\,\,\,\,\, \text{while } \,\,\,\,\,\,\,\, l(v)\lt a \,\,\,\,\,\,\,\, \text{if $v \in K$}$$ Proof : Since we may assume that $K$ is non-empty , we can suppose that (after a possible translation of $K$ and $v_0$ ) we have $0 \in K$ .
...
Why we can assume $0 \in K$ ?
My attempt :
Since $K$ is non-empty , we can find an element $v_1 \in K$ and define a transform $K\bigcup v_0 \to K'\bigcup v_0'=V'$ : $T(v) = v-v_1$ and then we can find a linear functional on $V'$ such that $$l(v_0')\ge a , \,\,\,\,\,\,\,\,\,\,\, \text{while } \,\,\,\,\,\,\,\, l(v')\lt a \,\,\,\,\,\,\,\, \text{if $v' \in K'$}$$ Then define $l'(v)=l(v-v_1)$ , if $l'$ is a linear functional we can get the desired conclusion . However , if $l(v_1)\neq 0$ then $l'$ is not linear since $$l(x)+l(y)-l(v_1)=l'(x+y) \neq l'(x)+l'(y)=l(x)+l(y)-2l(v_1)$$
As you said correctly, everything has to be shifted by some point in $K$. So let $K$ not contain the origin but $v_1\in K$.
Let $K'=K-v_1$ and $v_0' = v_0-v_1$. Now we can separate $K'$ and $v_0'$, i.e., there is a linear functional $l'$ and a real number $a'$ such that $l'(v_0')\ge a'$ and $l'(v)<a'$ for all $v\in K'$.
Now we have to shift things back. For all $v\in K$ we have: $$ l'(v) = l'(v-v_1+v_1) = l'(\underbrace{v-v_1}_{\in K'})+l'(v_1) < a' + l'(v_1) $$ and for $v_0$ we have $$ l'(v_0) = l'(v_0'+v_1) = l'(v_0')+l'(v_1) \ge a' + l'(v_1). $$ Hence the linear functional $l=l'$ and the real number $a=a'+l'(v_1)$ accomplish the separation for $K$ and $v_0$.