Since you want something like a bounded variable but with observed, what you are looking for is a truncated distribution. If you just treat the truncated distribution as any other distribution, you want to find out the log-likelihood (so that you can at least wrap it in DensityDist and used it in PyMC3).
Have a look at the wikipedia page of the truncated normal distribution, you would see the truncated distribution is generated by dividing the normal distribution with the normal CDF within the bound so that the distribution integrates to 1. You could do that by adding the -log(\sigma*(-\frac{1}{2}-erf(\frac{lowerbound - \mu}{\sqrt{2}*\sigma}))) to your model using pm.Potential, which actually gives you something quite similar to the censor_example.py