Like PS or PDF surface the win32 printing surface should be resizable (with a function like cairo_win32_printing_surface_set_size).
The reason this function is not implemented is because cairo doesn't own the device you are printing to. It just translates the cairo API to GDI calls. It is the responsibility of the application to do all the setup of the Windows device. For example the application needs to call the StartDoc, EndDoc, StartPage, and EndPage functions.
The recommended way to change the page size is to destroy the cairo_win32_printing surface, use the windows API to change the page size, then create a new cairo_win32_printing surface with the same device handle. This works because the printing surface does not store any document level state. All it does is store the drawing commands you call then when show_page is called or the surface is finished it calls the GDI drawing functions on the device handle you supply to draw the page.
The PS and PDF surfaces have set size because without those functions it would not be possible for an application to change the page size.