Given that the ArcGIS API for Python can work with web-based and multiple local geometry libraries, results aren't always as they seem at first glance. It is helpful to use 29.12. inspect — Inspect live objects — Python 3.6.5 documentation to understand which geometry libraries are being used, or trying to be used, and whether the result is expected.
To understand why Aaron Pulver made the statement about Geometry.project_as() only working with ArcPy:
>>> import arcgis
>>> import inspect
>>> print(inspect.getsource(arcgis.geometry.Geometry.project_as))
def project_as(self, spatial_reference, transformation_name=None):
"""
Projects a geometry and optionally applies a geotransformation.
Parameter:
:spatial_reference: - The new spatial reference. This can be a
SpatialReference object or the coordinate system name.
:transformation_name: - The geotransformation name.
"""
from six import string_types, integer_types
if HASARCPY:
if isinstance(spatial_reference, SpatialReference):
spatial_reference = spatial_reference.as_arcpy
elif isinstance(spatial_reference, arcpy.SpatialReference):
spatial_reference = spatial_reference
elif isinstance(spatial_reference, integer_types):
spatial_reference = arcpy.SpatialReference(spatial_reference)
elif isinstance(spatial_reference, string_types):
spatial_reference = arcpy.SpatialReference(
text=spatial_reference)
else:
raise ValueError("Invalid spatial reference object.")
return Geometry(self.as_arcpy.projectAs(spatial_reference=spatial_reference,
transformation_name=transformation_name))
return None
>>>
Basically, if ArcPy is not installed, it doesn't matter what you pass for the arguments because they are never being looked at, the function simply returns None immediately.