You can use TrackingFunction
to restrict the Slider2D
thumb to the desired region:
Restrict the thumb to the unit circle:
Manipulate[Graphics[{FaceForm[Opacity[.3]], Blue, Disk[],
Black, Circle[{0, 0}, 2], Line@{{0, 0}, z},
PointSize @ Large, Red, Point@z}],
{{z, {1, 0}}, {-1, -1}, {1, 1}, TrackingFunction -> ((z = Normalize[#];) &)}]

You can replace ((z = Normalize[#];) &)
with ((z = RegionNearest[Circle[]][#];) &)
to get the same result.
Use
TrackingFunction -> ((z = If[Norm@# > 1, Normalize[#], #];) &)
(*or TrackingFunction -> ((z = RegionNearest[Disk[]][#];) &) *)
to restrict the thumb the the unit disk:

Alternatively, add the thumb region as a second control:
regions = Flatten[{RegionBoundary @ #, #} & /@
{Disk[], Rectangle[{-(1/2), -(1/2)}], Triangle[], RegularPolygon[6]}]
icon[size_: 20] := Tooltip[Graphics[{Blue, #}, ImageSize -> 20], #] &;
setters = # -> icon[]@# & /@ regions;
Manipulate[Graphics[{FaceForm[Opacity[.3]], EdgeForm[{Opacity@1, Blue}], Blue,
region,
Black, Circle[{0, 0}, 2], Line@{{0, 0}, z},
PointSize@Large, Red, Point@z}],
{{region, Circle[]}, setters, SetterBar,
TrackingFunction -> ((region = #; z = RegionNearest[#]@z;) &),
Appearance -> "Horizontal" -> {Automatic, 2}},
{{z, {1, 0}}, {-1, -1}, {1, 1},
TrackingFunction -> ((z = RegionNearest[region]@#;) &),
ImageSize -> {100, 100}},
Method -> "ControlAreaDisplayFunction" ->
(Row[Column[#, Alignment -> Center] & /@ #[[1]], Spacer[15]] &)]
