I'm writing some 3D math classes for Python. I'd like to make a Point3 class that is separate from Vec3 in the following respects:

Point3 - Point3 = Vec3
  Point3 + Vec3 = Point3

Otherwise, all operations on Vec3 you can perform on Point3. The motivation for this is to separate the mathematical concept of a point from a vector, hopefully leading to clearer type separation and an easier to understand API.
However, with Python's duck typing and the common practice of expecting a certain interface regardless of type, is it better just to use a Vec3? Is it more efficient?
I understand your argument.  I, too, have always struggled with classes for points.  In my experience it's better (although I guess perhaps not "more pythonic") to take a more functional approach and write your API in terms of functions that takes lists/tuples.
The main objection to this, I think, is that you probably want a compact way of writing simple algebraic operations (sums etc.),  but for that I would suggest using numpy.  Not only does numpy support element-wise addition, but it gives you efficiency where you are likely to need it in the future, with matrix operations and the like.
At the same time, while you say that you want a clean API, the differences you are adding to the API will be invisible, except in the documentation.  And really, an invisible API is not that useful.
I know this is nothing like what you were originally asking, but I suspect it is the best design in the long term (i.e. as your library grows and you want to support more ambitious transformations of points, batch processing, etc., etc.).
Is the concept of a Point3 class, separate from a Vec3 class, unpythonic?