I have the same need (to store a limited amount of numerical data within an ontology) and the serialization into string is the "obvious" solution I was missing :-) Thanks for that. In fact connecting the dots with hindsight this seems to be quite a standard solution, for example in the SVG standard the storage of paths and other geometries is simply a sequence of pairs of numbers.
Reasoning with numerical array contents would probably not be a typical use case, but there could be other functionality that would make life easier working with mixed data and moving them seamlessly between owl <-> python. For example introduce a convention for a 'JSONString' data type that requires a valid json as input and maps immediately to a python object upon deserialization... Just some thoughts