One small limitation I found with WSPBuilder is that there is not a default way of adding new web parts to existing features. Fortunately, there is an easy way to do this.
1. Create a WSPBuilder project in Visual Studio.
2. Add a new WSPBuilder Web Part Feature to the project. (Ctrl+Shift+A)
3. Now add another Web Part Feature. At this point, your project should look something like this:
4. Drag the web part you want combined into the parent folder of the other feature and then delete the feature folder from where you dragged it.
5. Open the elements.xml file and add another File node with the information from the second web part.
<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Name="WebPartPopulation" Url="_catalogs/wp" RootWebOnly="TRUE">
<File Url="WebPartFeature1.webpart" Type="GhostableInLibrary">
<Property Name="Group" Value="MyGroup"></Property>
<Property Name="QuickAddGroups" Value="MyGroup" />
</File>
<File Url="WebPartFeature2.webpart" Type="GhostableInLibrary">
<Property Name="Group" Value="MyGroup"></Property>
<Property Name="QuickAddGroups" Value="MyGroup" />
</File>
</Module>
</Elements>
6. Open the feature.xml file and add an ElementFile entry for the second web part.
<?xml version="1.0" encoding="utf-8"?>
<Feature Id="a942cf13-5e3b-48e6-9862-6f98dc931375"
Title="WebPartFeature1"
Description="Description for WebPartFeature1"
Version="12.0.0.0"
Hidden="FALSE"
Scope="Web"
DefaultResourceFile="core"
xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="elements.xml"/>
<ElementFile Location="WebPartFeature1.webpart" />
<ElementFile Location="WebPartFeature2.webpart" />
</ElementManifests>
</Feature>
7. You can now build the project (Right-click Project –> Build), build the WSP (Right-click Project –> WSPBuilder –> Build WSP) and deploy the feature (Right-click Project –> WSPBuilder –> Deploy). If you look in hive under TEMPLATE\Features\YourFeature, you will see that both web parts are there.