Wow, it actually is possible now.
In ui.R:
plotOutput("foo", height="auto")
In server.R:
output$foo({
# create plot
}, height=function() { session$clientdata$output_foo_width * 1.0 })
You can modify "1.0" in the last line to get a different aspect ratio. And make sure to change "output_foo_width" to replace "foo" with your plot's ID.
You also have to modify the line
shinyServer(function(input, output) {
to be
shinyServer(function(input, output, session) {
If you get errors from the above then you may need to upgrade to a more recent build of Shiny than is on CRAN; try installing it from GitHub:
install.packages("devtools")
devtools::install_github("shiny", "rstudio")