Если вы хотите чтобы на верхнем уровне у вас было 2 папки dist и public, то в output нужно указать '/' и в генерируемых css, js и html указывать полный путь:
output: {
path: path.join(__dirname, "/"),
filename: "/dist/bundle.js"
},
filename: `/public/${page.replace(/\.pug$/, ".html")}`
2 output сделать нельзя.