At a high level you have two options:
- Attempt to reverse-engineer your customizations using a tool such as SPSource or Microsoft's WSeWSS Solution Generator. The former is probably a better option.
- Treat the customizations as "authored artifacts" rather than attempt to create "developed artifacts" from them. You can then simply pick up the whole lot with Content Deployment (e.g. using my Content Deployment Wizard utility) and import it into your other environment(s).
In terms of ALM (Application Lifecycle Management), the first approach is generally better. Your application will most likely be easier to upgrade if deployed this way, hence the general preference for Features.
Most devs would probably try to develop the customizations from the beginning, although most would also probably rely on some reverse engineering during this process (e.g. for list views - I don't know anyone who creates the CAML for those by hand). So you might not be using the optimum process - however there are many ways to skin the SharePoint cat and different developers use different approaches.
Key is really to be aware of any trade-offs with the selected approach. This isn't necessarily the simplest area of SharePoint.