It is straightforward to do so with numpy, scipy.interpolate.griddata, and matplotlib. Here is an example:
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import griddata
# data coordinates and values
x = np.random.random(100)
y = np.random.random(100)
z = np.random.random(100)
# target grid to interpolate to
xi = yi = np.arange(...
You have a lot of options.
The easiest solution for this simple task would be to use a GIS software, e.g. the free QGIS. Add delimited text layer and try raster interpolation. Download a free coastline vector and clip your raster with the coastline. A few searches at GIS SE can help you out if you get stuck. With a GIS option, it is easy to also plot e.g. ...
Yes, you can interpolate the rainfall from stations outside the watershed. However, the quality of the interpolation will depend on the distance between the stations and the watershed, the prevailing weather patterns, and to some extent the topography.
For example, it probably wouldn't be appropriate to use a station on the rainy side of a mountain divide ...
In short: Yes you can/should use stations outside of your watershed.
More in detail: There is well known methods in hydrology to solve the situation you are presenting.
One simple method is to build Thiessen Polygons on your map to model the incoming precipitation in your target watershed using gauge station located inside and outside your watershed.
As @gansub implicitly suggested, you may have a better outcome by defining the output grid as well.
Check this very similar question:
How to interpolate scattered data to a regular grid in Python?
After comments, I realize I missed the irregular target grid. Maybe this answer helps: