Wow! What wonderfully thought provoking questions!
For me a team is a group of people working towards a common purpose. I don’t think there needs to be an explicit vision, but definitely a shared understanding of the direction of travel. For instance, when I’m the ScrumMaster of a team I try to avoid building an understanding of the software that is being built by the team. As a former developer, I find that knowing anything about the product distracts me from holding the space that allows the product to be built. I consider myself part of the team, but one that is blind to the output.
I’ve never had the pleasure of working with a team that is truly cross-functional. I’ve always started with specialists who I encourage to work towards becoming specialist generalists. When thinking about this question beyond software development, I think of medical teams who have different levels of knowledge in different areas that together complement each other. Some members could do the jobs of others, who in turn couldn’t do the job of those members. Which of these members are specialist and which cross-functional? Is that ok?
I’ve seen teams who are purely R&D and therefore have no product to be delivering. (Unless you consider their results a product.) I think a team is a team, regardless of the environment.