I think you can achieve what you want with the following:
from mpi4py import MPI
import dolfinx
import ufl
import numpy as np
domain = dolfinx.mesh.create_unit_square(MPI.COMM_WORLD, 1, 1)
tdim = domain.topology.dim
V = dolfinx.fem.FunctionSpace(domain, ("CG", 2))
point = np.array([[0.2, 0.3, 0]])
bb = dolfinx.geometry.BoundingBoxTree(domain, tdim)
bbox_collisions = dolfinx.geometry.compute_collisions(bb, point)
cells = dolfinx.geometry.compute_colliding_cells(domain, bbox_collisions, point)
cell = cells.links(0)[0]
cmap = domain.geometry.cmap
geom_dofs = domain.geometry.dofmap.links(cell)
x_ref = cmap.pull_back(point, domain.geometry.x[geom_dofs])
n = ufl.as_vector([0.1, 0.2])
expr = ufl.inner(ufl.grad(ufl.TestFunction(V)), n)
E = dolfinx.fem.Expression(expr, x_ref)
grad_u_at_x_ref = E.eval([cell])
print(f"Cell: {cell}, Point: {point}, x_ref: {x_ref}, grad(u)*n {grad_u_at_x_ref}")