Turns out it's not as easy as I thought. Getting the files and libs and exes to compile is pretty easy. The problem came with controlling the build process. Within visual studio extensibility you can only start builds. There isn't any way (that I found) to begin the build process but control it from there. The following is the code I used to get all of the files to compile and to build them. Unfortunately each call to compile/build starts and stops a seperate build process, the equivalent of right-clicking and compiling each individual file. It seems going for a solution like Jam would be better.
ArrayList PCHFiles = new ArrayList();
ArrayList NormalFiles = new ArrayList();
ArrayList Libraries = new ArrayList();
ArrayList Executables = new ArrayList();
for (int i = 1; i <= b.BuildDependencies.Count; ++i)
{
    BuildDependency d = (BuildDependency)b.BuildDependencies.Item(i);
    VCProject project = d.Project.Object as VCProject;
    Configuration active = d.Project.ConfigurationManager.ActiveConfiguration;
    IVCCollection configs = project.Configurations as IVCCollection;
    VCConfiguration cfg = configs.Item(active.ConfigurationName) as VCConfiguration;


    if (cfg.ConfigurationType == ConfigurationTypes.typeStaticLibrary)
    {
        Libraries.Add(cfg);
    }
    else
    {
        Executables.Add(cfg);
    }

    foreach (VCFile f in (project.Files as IVCCollection))
    {
        IVCCollection fconfigs = (f.FileConfigurations as IVCCollection);
        VCFileConfiguration fcfg = fconfigs.Item(active.ConfigurationName) as VCFileConfiguration;
        VCCLCompilerTool tool = fcfg.Tool as VCCLCompilerTool;

        if (tool != null)
        {
            if (tool.UsePrecompiledHeader == pchOption.pchCreateUsingSpecific)
                PCHFiles.Add(fcfg);
            else
                NormalFiles.Add(fcfg);
        }
    }
}

// build
foreach (VCFileConfiguration fcfg in PCHFiles)
{
    fcfg.Compile(true, true);
}
foreach (VCFileConfiguration fcfg in NormalFiles)
{
    fcfg.Compile(true, true);
}
foreach (VCConfiguration cfg in Libraries)
{
    cfg.Build();
}
foreach (VCConfiguration cfg in Executables)
{
    cfg.Build();
}